如何编译引用另一个本地更改的maven项目的maven项目?

时间:2012-12-31 03:29:03

标签: java maven

我有2个项目,A和B. B是一个lib项目,是对B的引用。 当我向B添加新功能时,可以在B上运行mvn install,但在A上的mvn install上失败,因为无法从新B中找到符号。

我确定我在项目B上安装正确,但为什么A仍然无法编译和安装?

这是A的pom.xml:

<dependency>
    <groupId>A and B's group</groupId>
    <artifactId>B</artifactId>
    <scope>provided</scope>     
</dependency>

任何线索?感谢

3 个答案:

答案 0 :(得分:1)

我建议创建一个如下所示的多模块构建:

+-- root
      +-- pom.xml
      +-- module-A
      +-- module-B

在根pom中,您需要定义这样的模块,并将包装定义为 pom

<modules>
  <module>module-A</module>
  <module>module-B</module>
</modules>

此外,您可以通过以下方式定义模块A与模块-B的依赖关系:

<project ..
  <parent>
     <groupId>project.parent</groupId>
     <artifactId>parent</artifactId>
     <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>module-A</artifactId>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>module-B</artifactId>
      <version>${project.version}</version>
    </dependency>
    ..
  </dependencies>
  ..
</project>

使用此设置,您只需通过以下方式从根文件夹构建所有模块:

mvn clean package

或者您可以将该结构导入Eclipse(m2e安装?)或任何其他IDE,如IntelliJ或Netbeans。

答案 1 :(得分:0)

尝试mvn clean install进行全新的A版本,或mvn -U install以强制Maven查找更新的快照。听起来您的环境仍在使用较旧的JAR。很难从这个描述中看出你的设置是什么 - 听起来你正确地将B安装到本地存储库,但我不确定你的IDE是否也试图'有用'。

答案 2 :(得分:0)

您可以在项目中包含<version>元素以及依赖项声明。

  • 从Maven命令行传递一个版本变量。例如:${build.version}

模块A的pom.xml

<groupId>A & B's Group ID</groupId>
<artifactId>A</artifactId>
<version>${build.version}</version>

<dependencies>
    <dependency>
        <groupId>A & B's Group ID</groupId>
        <artifactId>B</artifactId>
        <version>${build.version}</version>
        <type>war</type>
        <scope>provided</scope>
    </dependency>   
...

因此,每当构建和安装项目B时,依赖项将在该特定版本的本地maven存储库中可用,并将由项目A选择