【发布时间】:2011-10-29 01:57:17
【问题描述】:
这是我在 StackOverflow 上的第一个问题。到目前为止,通过阅读其他 Q&A 学到了很多东西。
问题是关于 Maven 多模块的。
以下是我的项目结构:
公地父母 |--pom.xml |--commons-module1 |--pom.xml |--核心 |--pom.xml |--cli |--pom.xmlcli 代表命令行界面。
commons-module1 是一个供公司内不同项目使用的库。 commons-module1/core 包含仅打包库类的 pom。 commons-module1/cli 包含了打包命令行测试程序的pom。
commons-parent/pom.xml(相关sn-p):
<groupId>com.abc.def</groupId>
<artifactId>commons-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<profile>
<id>reactor</id>
<properties>
<env.type>dev</env.type>
</properties>
<modules>
<module>../commons-module1</module>
</modules>
</profile>
there is a distribution management section
but there is no repositories section in pom.
commons-module1/pom.xml(相关sn-p):
<parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>cli</module>
<module>core</module>
</modules>
there is a distribution management section
but there is no repositories section in pom.
commons-module1/core/pom.xml(相关sn-p):
<parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1-core</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
there is a distribution management section
but there is no repositories section in pom.
commons-module1/cli/pom.xml(相关sn-p):
<parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1-cli</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
there is a distribution management section
but there is no repositories section in pom.
环境:
Apache Maven 2.1.0 (r755702; 2009-03-18 19:10:27+0000)
Java version: 1.6.0_25
问题描述:
当一个项目需要依赖commons-module1-core时,项目会有一个maven pom中的依赖如下:
<dependency>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
这仅在完整的层次结构时有效(即满足依赖关系) commons-parent,commons-module1,commons-module1-core 这三个都在本地存储库中。 如果我在本地缺少它们中的任何一个,它就不起作用。我们有 Nexus 存储库管理器 设置。所以,我的期望是,使用 commons-module1-core 库的项目 可以在他们的 pom 中声明上面的依赖 sn-p 并通过传递依赖 解决方法,获取父 pom。
我错过了什么吗?
编辑
对于我认为与我的问题类似的更简单的用例 - 请参阅这个未回答的问题:
Child not finding parent pom in flat structured multi module maven build
【问题讨论】:
-
我不明白你多次写过你有“distributionManagement”。这是否意味着你的 pom 中真的有很多次?如果是这样,那么在您的 commons-parent pom 中只定义一次分发管理。
-
你写commons-cli只是打包了一个CLI测试程序?这是否意味着集成测试?
-
好的,我不确定分发管理是否会被继承。
-
commons-module1-core 可以作为其他模块的一部分使用,也可以独立使用(通过命令行程序)..在独立模式下使用时,我基本上使用 maven 程序集,它把 cli和classpath中的核心jar,并打包一个批处理文件/shell脚本来运行客户端程序
-
要创建一个 cli 东西,你应该看看 maven-appassembler 插件,它支持你创建批处理文件/shell 文件,以便以非常方便的方式调用你的 java 项目。
标签: maven-2