我很难设置一组相互依赖的相关 Maven 项目。
这是我的简化案例:
pom.xml -- parent pom
\base\
pom.xml
src\main\java\Base.java -- this is just a simple class
\derived\
pom.xml
src\main\java\Derived.java -- this is a simple class that needs Base class to compile successfully, and has a main function
我的目标是:
- 能够在我的机器上编译所有项目:
- 即
mnv clean compile
在\中成功
- 即
- 能够在我的机器上编译一个项目:
- 即
mnv clean compile
在 \base\ 和 \derived\ 中成功(尽管这可能无法按设计工作:Inter Project Dependencies in Maven)
[编辑:找到这个答案:base 需要在本地发布,然后在编译中派生:即在 \基础,做mvn clean compile install
而不是做只是做mvn clean compile
。完成此操作后,mvn clean compile
在 \derived 中进行操作即可。尽管如此,在不触及全局状态(即无需安装基础)的情况下这样做会很棒——所以如果有人知道实现这一点的方法,请将其添加为答案]
- 即
- 能够直接从源代码树在我的机器上运行派生项目(mvn exec:run 或等效项):
- 即
mvn exec:run
在 \derived\ 应该编译(如果需要)并运行derived.jar
- 即
- “共享组件”用例:将基础工件推送到共享存储库,其他人可以将其作为 maven 依赖项(即编译时依赖项)使用:
- 即
mvn clean compile ???
会将其推送到 ~/.m2/config.xml 中指定的共享存储库
- 即
- “图像目录”用例:将派生的工件及其依赖项推送到本地目录,可以通过“java -jar ...”在其中运行,也可以公开为 ftp/http 共享以供其他人获取. 即,像这样的用例:
mvn clean compile ???
会将derived.jar 和依赖项(如base.jar)推送到~/.m2/maven.repo/.../derived 或等效项,然后我可以cd ~/.m2/maven.repo/.../derived并java -jar derived.jar
运行它。mvn clean compile ???
将 base.jar 推送到 ~/.m2/maven.repo/.../base (或derived.jar 到其相应的目录),它已经通过本地 Web 或 ftp 服务器作为下载点公开。
如何实现上述目标?
这是父pom的相关部分:
...
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parentpom</name>
<modules>
<module>base</module>
<module>derived</module>
</modules>
...
这是 base pom.xml 中的相关部分:
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.base</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base</name>
...
这是派生的 pom.xml 的相关部分:
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.derived</groupId>
<artifactId>derived</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>derived</name>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
预先感谢您的帮助。