Java 如何添加Mavenized项目的引用

Java 如何添加Mavenized项目的引用,java,spring,jakarta-ee,maven-2,maven,Java,Spring,Jakarta Ee,Maven 2,Maven,我有两个专业化的项目 项目A:Java项目 项目B:javaweb项目 早些时候,在对这两个项目进行mavenize之前,我在Project_B中引用了Project_A(buildpath)。 现在我已经用maven2配置了这两个项目。我的问题是,我如何在项目B中添加项目a的引用,以使项目B的战争能够运行 到目前为止,我已经尝试了以下代码块,这些代码看起来很有效,但是在运行时Project_B的WAR中,在applicationContext中抛出了一个异常,Project_A的类的实例无法启

我有两个专业化的项目

  • 项目A:Java项目
  • 项目B:javaweb项目
  • 早些时候,在对这两个项目进行mavenize之前,我在Project_B中引用了Project_A(buildpath)。 现在我已经用maven2配置了这两个项目。我的问题是,我如何在项目B中添加项目a的引用,以使项目B的战争能够运行

    到目前为止,我已经尝试了以下代码块,这些代码看起来很有效,但是在运行时Project_B的WAR中,在applicationContext中抛出了一个异常,Project_A的类的实例无法启动

    1-项目_A被清理并安装在名为“myproject-1.0.jar”的本地存储库中 其中构建片段(项目的POM)如下所示#

    编辑的部分

      <modelVersion>4.0.0</modelVersion>
       <groupId>org.myurl<groupId>
    <artifactId>projectA</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <name>${project.artifactId}-${project.version}</name>
    
    
    
    
    build>
            <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
            <outputDirectory>${basedir}/target/classes</outputDirectory>
            <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
            <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
            <resources>
                <resource>
                    <directory>${basedir}/src/main/resources</directory>
                </resource>
            </resources>
            <testResources>
                <testResource>
                    <directory>${basedir}/src/test/resources</directory>
                </testResource>
            </testResources>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <optimize>true</optimize>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    
    4.0.0
    org.myurl
    项目A
    1
    罐子
    ${project.artifactId}-${project.version}
    构建>
    ${basedir}/src/main/java
    ${basedir}/target/classes
    ${basedir}/src/test/java
    ${basedir}/target/test类
    ${basedir}/src/main/resources
    ${basedir}/src/test/resources
    maven编译器插件
    1.6
    1.6
    符合事实的
    
  • Project_B的POM片段,我在其中添加了Project_A的已安装jar

             <dependency>
        <groupId>org.myurl</groupId>
        <artifactId>projectA</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
    
    
    org.myurl
    项目A
    1
    编写
    
  • 提前谢谢你的建议

    回答: 事实上,maven没有任何问题。POM中的上述配置绝对正确。我将属性文件移到了/Resources下,后来我忘记了在使用属性文件的类中更改路径


    尽管如此,我还是要感谢Dolphin和Nicola Musatti提出的建议。

    你们走得很好,pom片段很好,你们现在需要做的是创建父项目(Maven反应堆)。所以,您将创建新项目,并在该项目中定义模块(项目A和项目B)。您将在项目A和项目B中引用该父级,这样就可以了。谷歌maven家长看看它是如何做到的

    在构建项目B之后,maven将首先构建项目A,然后构建项目B

    问题是你的方法也应该有效(只是这不是一个正确的方法)。所以,可能您在groupId版本中犯了错误。您可以通过构建项目A,然后检查本地maven存储库来检查这一点。在它里面,如果没有出现问题,您应该可以看到文件夹结构

    org/myurl/projectA-1.0.jar

    项目结构如下:

    项目父级 项目a b项目

    在“项目父级”中定义:

    <groupId>foo.bar</groupId>
    <artifactId>project-parent</artifactId>
    <version>00.01-SNAPSHOT</version>
    <name>FooBar:: Parent Project</name>
    <packaging>pom</packaging>
    
    <modules>
        <module>../project-a</module>
        <module>../project-b</module>
    </modules>
    
    foo.bar
    项目父级
    00.01-00
    FooBar::父项目
    聚甲醛
    ../project-a
    ../project-b
    
    在项目a和项目b中添加:

    <parent>
        <groupId>foo.bar</groupId>
        <artifactId>project-parent</artifactId>
        <version>00.01-SNAPSHOT</version>
    </parent>
    
    
    美食酒吧
    项目父级
    00.01-00
    
    在项目b中,您将参考项目a

        <dependency>
            <groupId>foo.bar</groupId>
            <artifactId>project-a</artifactId>
            <version>00.01-SNAPSHOT</version>
        </dependency>
    
    
    美食酒吧
    项目a
    00.01-00
    

    构建父模块后,它应正确构建所有模块。不要使用plugin,忘了我说过的Maven Reactor:)

    听起来可能问题在于生成的projectb war中没有包含projecta中的类?是吗?如果我浏览jboss服务器的deploy文件夹,我可以很容易地找到所有生成的Project_A WEB_INF类和Project_B的Webappi。我编辑了Project_A的pom片段,在我本地的maven存储库下,我可以看到projectA-1.0。jari在谷歌上搜索过,但无法选择如何使用它。到目前为止,我已经尝试将maven maven reactor插件放在1.0中。在那之后,我尝试安装mvn,但war仍然不能正常运行。此外,我正在使用myeclipse。我们非常感谢您的进一步帮助好的,我将在我的回答中添加一个例子。下面是解释:大多数reactor插件特性现在都是本机支持的(自Maven 2.1.0以来)。所以,当您处理父/模块关系时,您使用的是maven reactor模式,这里使用的实际上是聚合器,而不是父项目。不幸的是,这些是不同的概念,即使官方文件在这个问题上有误导性。聚合通过reactor帮助同时构建项目,而父项目的目的是在相关项目之间共享设置。project-a和project-b不需要将project-parent指定为它们的父项,这样做实际上是个坏主意。