maven2多模块父pom丢失
Posted
技术标签:
【中文标题】maven2多模块父pom丢失【英文标题】:maven2 multi module parent pom missing 【发布时间】:2011-10-29 01:57:17 【问题描述】:这是我在 *** 上的第一个问题。到目前为止,通过阅读其他 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 项目。 【参考方案1】:首先,尽快更新到Maven 3.0.3...2.1.0 有很多bug,不再维护。 其次,您滥用了您一直编写的 pom 的某些部分:
<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>
但你应该这样做:
<parent>
<groupId>com.abc.def</groupId>
<artifactId>commons-module1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>commons-module1-core</artifactId>
<packaging>jar</packaging>
【讨论】:
我将尝试升级到 maven 3。我最初被推迟了,因为我们确实大量使用站点报告。而且我记得当我使用 mvn clean package site 安排 hudson 工作时出现了一些问题......顺便说一句,你为什么建议我从子模块中删除版本?它们不能有与父模块不同的生命周期和版本吗? 这是为了确认升级到 maven3 有效。谢谢你,khmarbaise。稍后我将处理其他 maven3 站点生成问题..这更重要:) 如果您想拥有单独的生命周期而不是模块不应该像您正在使用的那样在一棵树中保持在一起。这是一个多模块构建,这意味着在 Maven World 中具有相同的版本号是有意义的。如果您需要让部件具有不同的生命周期,请使用简单的单独模块。 Maven 3 中的 Maven 站点比 Maven 2 中的效果更好,因为它们将站点生成与 Maven 的核心分开......只有一个问题你必须注意你使用Maven -Site -Plugin 的正确版本(显然是 3.0)。以上是关于maven2多模块父pom丢失的主要内容,如果未能解决你的问题,请参考以下文章