我有三个Java控制台应用程序--A,B和C,都是用Maven管理的。应用程序A包含常用工具类,这些工具由另外两个应用程序--B和C使用。我需要知道如何使用Maven解决这种依赖关系。
我有一个想法 - 如果我错了,请纠正我,通过mvn install
命令将应用程序A打包并安装到本地Maven存储库中,并将此库设置为其{{1}中应用程序B和C的新依赖项文件。
这是一个好主意还是有更好的方法来解决这个问题?
这个问题似乎与我的问题有关,但在我的情况下,我无法判断它是否是一个好的解决方案 - How do I add a project as a dependency of another project?
答案 0 :(得分:2)
是的,完全没问题。此解决方案还可以扩展 - 您可以稍后将工件安装到远程存储库甚至Maven Central。
其他一些选择是将这三个项目作为模块置于公共父POM下,并将包装设置为pom
。优点是您可以使用单个命令安装所有三个工件,即在使用Maven Release插件时即时更新依赖项。
答案 1 :(得分:1)
是的,这似乎是解决此问题的正确方法。或者,您可以部署到真实存储库。如果您希望其他人在不先安装A的情况下构建项目B和C,情况会更好。
我会将B和C使用的代码放在自己独立的jar中。这样,B和C不会使用项目A的全部内容,而只使用包含所需代码的库。
我不会使用链接文章的建议。它使用的系统路径并不理想,因为它需要一个绝对路径,所以只有当有人在你的文件系统上将项目安装在同一个地方时它才会起作用。
答案 2 :(得分: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会神奇地为你解决问题,按照正确的顺序构建每个项目,如果有依赖项,可以让其他项目可用。
BONUS:在上面的示例中,我还添加了对Maven Assemble的引用,您可以使用它将所有项目打包到一个发行版中。