Java 如何在项目上下文之外包含maven模块?
我希望在某种全局项目目录中有一个模块,这样我就可以将该模块包含在所有其他使用该通用代码的项目中 但是,我怎样才能告诉maven的父级Java 如何在项目上下文之外包含maven模块?,java,maven,svn,maven-module,Java,Maven,Svn,Maven Module,我希望在某种全局项目目录中有一个模块,这样我就可以将该模块包含在所有其他使用该通用代码的项目中 但是,我怎样才能告诉maven的父级pom包含并编译这个全局共享模块呢? 以下操作不起作用: svn/MyGlobalProject/project-commons/pom.xml //should be shared among different projects svn/MyProject/web-parent/trunk/pom.xml //t
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 install
,它将安装在本地存储库中。然后,您的其他项目可以将其作为依赖项引用:
无论什么
或Nexus),您可以将全局工件部署到。Artifactory有一个免费的社区版。然后,您可以在设置文件中列出此存储库,Maven将解析上载到其中的工件。使用相对路径包含一些子模块不是一个好做法……您将遇到很多问题
你不能把公共项目作为父模块的依赖项
这样,您将在所有将父项目声明为父项目的子模块中拥有该“公共项目”
为什么每次编译父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
父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>
德项目
项目父级
聚甲醛
德项目
公共项目
${common.project.version}
项目域
项目网站
就这样。。。
这样,project domain和project web将继承该依赖关系,并且您将能够在子模块中的任何地方使用它
使用依赖关系管理可能是一个很好的改进我正在尝试使用子模块方法,以完全避免必须将项目安装到repo中。@membersound为什么?这正是mvn安装的目的。试图避免这一点是为了对抗Maven的本质。我会推荐自己的人工方法-易于安装和许多好处。嗯,好的。当我部署依赖于commons的模块项目时,有没有办法自动检测commons中的更改?@membersound您可以使用特殊版本号LATEST
或RELEASE
始终引用最新的commons工件(分别为快照和非快照)。但这在Maven社区是不受欢迎的,因为它可能导致不稳定。有关更多信息,请参阅。如果我们需要projectcommons
作为一个模块本身,它可以在profiles下使用,该怎么办?基本上,我的pom中有几个概要文件,需要projectcommons
作为两个概要文件的一部分@Duncanjones你能举一个这个架构的例子吗?听起来也许这是正确的方法。我不一定每次都要编译我的公共项目。但我至少希望它能由maven从工作区中解决,而不必在maven repo中安装它。这就是我的答案。这个答案只是建议了一种替代方法,将该依赖项合并到许多子项中,这可能是一种明智的方法。@ivoruJavaBoy ok,但这也要求我将commons依赖项安装到本地repo中。然后,我还可以直接将依赖项添加到每个需要它的模块中。是的……但我似乎发现单独安装公共项目并不困难……正如@membersound所要求的那样。。您可以使用一些免费的连续集成工具(如ApacheContinuum)在每次提交后在远程存储库(Artificatory、nexus)上重新构建和部署公共项目……这样,您将确保始终使用公共项目的最后一个快照
<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>