我有2个Maven网络项目A和B. B包含一些公共部分,A依赖于B。
在A的pom.xml中我有:
<dependencies>
<dependency>
<groupId>com.mygroup</groupId>
<artifactId>B</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
我有两个问题:
在B中进行一些更改时,如果我在A上运行maven构建,则不会在生成的分解存档中看到更改。
尝试从Eclipse部署A不起作用 - B的内容未包含在生成的war / explosion存档中。
感谢您的帮助。
答案 0 :(得分:4)
好吧,如果您更改了B中的内容,则必须将其重新安装到本地maven仓库(mvn install
)中,以便其他本地项目将其作为依赖项来接收最新修改。
在构建maven项目时,最好使用Maven构建它(比如mvn package
之类的命令)而不使用其他构建工具(例如Eclipse)。如果您想构建一个la Maven,但是从Eclipse GUI的舒适度来看,您可以从以下位置获取m2_eclipse插件:
http://m2eclipse.sonatype.org/installing-m2eclipse.html
将Maven与Eclipse集成在一起。然后,当您在Eclipse中单击项目时,在“运行...”选项下,您将拥有允许Maven构建它的那个,将所有控制台输出重定向到Eclipse控制台窗口。
作为最后一点,在诸如一个aboce之类的设置中,理想情况下,您将创建一个父Maven项目(打包为“pom”),该项目具有子项目B和A(按此顺序)。这样一来,如果你修改了两个项目中的东西,并且你希望用最新的modif构建所有东西,你就可以在父pom上进行maven安装,Maven会处理所有事情。
答案 1 :(得分:4)
放大@ AndreiBodnarescu的观点,您可能没有看到在构建项目A时对project-B所做的更改,因为Maven存储库中没有更改。
如果在同一台机器上构建project-B,您是否可以确保使用mvn install
安装到本地存储库?如果project-B是从不同计算机上的构建派生的,那么使用mvn deploy
部署项目-B到公共共享存储库。在这种情况下,如果您没有使用SNAPSHOTted版本控制,或者您没有增加项目B的版本号,则仍然不会选择项目-B。
我看到B的类型为war
。 A的包装是什么?它是EAR吗?如果是这样的话,使用带有项目A的maven-war-plugin
将没有任何帮助。