2012-12-31 28 views
3

我有2个项目,A和B. B是一个lib项目和对B的引用。 当我向B添加新函数时,可以在B上运行mvn install,但由于无法在A上运行mvn install从新B找到符号。如何编译引用另一个本地更改的maven项目的maven项目?

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

这是一个的pom.xml:

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

任何线索?谢谢

+0

在.m2/repository中是否是A? –

+0

@Chris Gerken不,它不在那里。但我有我要安装的源代码,是否与此问题有关? – JerryCai

+1

为什么你使用**提供的范围**? – khmarbaise

回答

0

尝试mvn clean install做一个全新的A版本,或者mvn -U install强制Maven查找更新的快照。这听起来像你的环境仍在使用旧的JAR。很难从这个描述中知道你的设置是什么 - 听起来像你正在将B安装到本地存储库,但我不确定你的IDE是否也试图成为“有用”的。

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仓库可用,并且将通过项目来挑一个

+0

这不起作用,您可以通过属性定义依赖项的版本,但不能通过工件版本来定义。 – khmarbaise

+1

这将使你建立**不**重现。 – khmarbaise

+0

您指的是一个用例场景。无论您是否需要可重复构建,这都是针对项目的。并且传递相同的构建版本确实会重现构建! – Arpit

1

我建议建立一个多模块构建类似如下:

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

在root 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)。

相关问题