Java 如何在项目上下文之外包含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

我希望在某种全局项目目录中有一个模块,这样我就可以将该模块包含在所有其他使用该通用代码的项目中

但是,我怎样才能告诉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 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>