我想在某种全局项目目录中有一个模块,这样我就可以将该模块包含在使用该公共代码的所有其他项目中。
但是,我怎样才能告诉maven父pom
包含并编译这个全局共享模块?
以下不起作用:
svn/MyGlobalProject/project-commons/pom.xml //should be shared among different projects
svn/MyProject/web-parent/trunk/pom.xml //the parent pom used to build the application
svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1
svn/MyProject/web-parent/trunk/project-web/pom.xml //submodule 2
父pom.xml:
<project>
<groupId>de.project</groupId>
<artifactId>project-parent</artifactId>
<packaging>pom</packaging>
<modules>
<module>project-domain</module>
<module>project-web</module>
<module>../project-commons</module> <!-- Error -->
</modules>
</project>
mvn package
导致:
Child module trunk\project-commons of trunk\pom.xml does not exist
答案 0 :(得分:3)
如果您在该全局项目上运行mvn install
,它将安装在您的本地存储库中。然后,您的其他项目可以将其作为依赖项引用:
<dependency>
<groupId>whatever</groupId>
<artifactId>project-commons</artifactId>
<version>1.0</version>
</dependency>
这种简单化方法的缺点是,在您签出project-commons
并运行mvn install
之前,您的其他项目将无法编译。
更高级的方法是部署可以部署全局工件的网络可访问存储库(例如Artifactory或Nexus)。 Artifactory有一个免费的社区版本。然后,您可以在设置文件中列出此存储库,Maven将解析上传到它的工件。
答案 1 :(得分:0)
使用相对路径来包含一些子模块不是一个好习惯......你会遇到很多问题。
难道你不能把公共项目作为父模块的依赖项......
通过这种方式,您将在将父项目声明为父项的所有子模块中拥有“公共项目”...
为什么每次编译父pom时都要编译“常用”项目?
编辑:
你的SVN:
svn/MyGlobalProject/project-commons/pom.xml //should be shared among different projects
svn/MyProject/web-parent/trunk/pom.xml //the parent pom used to build the application
svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1
svn/MyProject/web-parent/trunk/project-web/pom.xml //submodule 2
PARENT POM.XML:
<project>
<groupId>de.project</groupId>
<artifactId>project-parent</artifactId>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>de.project</groupId>
<artifactId>project-commons</artifactId>
<version>${common.project.version}</version>
<dependency>
<dependencies>
<modules>
<module>project-domain</module>
<module>project-web</module>
</modules>
就像这样...... 通过这种方式,project-domain和project-web将继承该依赖项,并且您将能够在子模块中的任何位置使用它...
比使用依赖管理可能是一个很好的改进