2

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

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

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

这个问题似乎与我的问题有关,但我无法判断它在我的情况下是否是一个好的解决方案 -如何将项目添加为另一个项目的依赖项?

4

3 回答 3

2

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

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

于 2013-11-13T20:45:16.747 回答
1

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

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

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

于 2013-11-13T20:43:23.737 回答
0

运行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 的引用,您可以使用它来将所有项目打包到一个发行版中。

于 2013-11-13T20:49:58.407 回答