【问题标题】:Another own Maven project as dependency - how to solve it?另一个自己的 Maven 项目作为依赖项 - 如何解决它?
【发布时间】:2013-11-13 20:38:37
【问题描述】:

我有三个 Java 控制台应用程序 - A、B 和 C,它们都由 Maven 管理。应用程序 A 包含常用工具类,这些工具被另外两个应用程序 B 和 C 使用。我需要知道如何使用 Maven 解决这种依赖关系。

我有一个想法 - 如果我错了,请纠正我,通过 mvn install 命令将应用程序 A 打包并安装到本地 Maven 存储库中,并且此库在其 pom.xml 文件中设置为应用程序 B 和 C 的新依赖项。

这是个好主意还是有更好的方法来解决这个问题?

这个问题似乎与我的问题有关,但我无法判断它是否适合我的情况 - How do I add a project as a dependency of another project?

【问题讨论】:

    标签: java maven dependencies


    【解决方案1】:

    是的,完全没问题。此解决方案还可以扩展 - 您可以稍后将工件安装到远程存储库甚至 Maven Central。

    其他一些选择是将这三个项目作为模块放在一个公共父 POM 下,打包设置为pom。优点是您可以使用单个命令安装所有三个工件,即在使用 Maven 发布插件时即时更新依赖项。

    【讨论】:

      【解决方案2】:

      是的,这似乎是解决此问题的正确方法。或者,您可以部署到真实的存储库。如果您希望其他人在不先安装 A 的情况下构建项目 B 和 C,那就更好了。

      我会将 B 和 C 使用的代码放在各自单独的 jar 中。这样 B 和 C 就不会使用项目 A 的所有内容,而只是一个包含他们需要的代码的库。

      不会使用链接文章的建议。它使用的系统路径并不理想,因为它需要一个绝对路径,因此只有当有人将项目安装在与您的文件系统相同的位置时,它才会起作用。

      【讨论】:

      • 拜托,您能否详细说明一下为什么不建议使用建议专业链接的问题?谢谢!
      【解决方案3】:

      运行mvn install 将解决您的问题,但随后您将手动解决它。当您的项目发生变化时,它会产生许多复杂性。您需要的是一个 pom.xml 引用您的子项目:

      <project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
      >
        <modelVersion>4.0.0</modelVersion>
      
        <groupId>X</groupId>
        <artifactId>X</artifactId>
        <version>0.1</version>
        <name>X</name>
      
        <packaging>pom</packaging>
      
        <modules>
          <module>project_A</module>
          <module>project_B</module>
          <module>project_C</module>
        </modules>
      
        <build>
      
          <defaultGoal>package</defaultGoal>
      
          <pluginManagement>
            <plugins>
              <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                  <descriptors>
                    <descriptor>src/assemble/bin.xml</descriptor>
                  </descriptors>
                </configuration>
              </plugin>
            </plugins>
          </pluginManagement>
      
        </build>
      
      </project>
      

      将它放在一个目录中,该目录包含您的每个项目所在的这 3 个目录。然后你可以在这个目录上调用mvn clean package,Maven 会神奇地为你解决问题,以正确的顺序构建每个项目,如果有依赖关系,则让一个项目可供其他项目使用。

      奖励:在上面的示例中,我还添加了对 Maven Assemble 的引用,您可以使用它来将所有项目打包到一个发行版中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 2014-12-13
        • 2019-12-13
        • 1970-01-01
        相关资源
        最近更新 更多