我没有广泛使用Maven
目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要的话,每一个都指向< dependency >中的另一个。

现在我们不喜欢的是
我认为( 可能是不正确的 )

其中,fat箭头代表父级子关系,细箭头表示子模块。但这似乎不起作用,请参阅下面的代码和错误。
儿童项目2 pom
<groupId>ChildProject2</groupId>
<artifactId>ChildProject2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>Parent</groupId>
<artifactId>Parent</artifactId>
<version>${parent.version}</version>
<relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies> ... </dependencies>ChildProject2 - Error项目构建错误:不可解析的父级POM:未能传输父级:父级:pom:${parent.version}从http://repo1.maven.org/maven2缓存在本地存储库中,在中央更新间隔已过或强制更新之前,不会重新尝试解析。原始错误:无法将工件父级:父级: POM:${parent.version}从/转到中心(http://repo1.maven.org/maven2):索引45处路径中的非法字符:在错误的本地POM处的parent.relativePath和parent.relativePath点
亲本pom
<groupId>Parent</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<parent.version>0.0.1-SNAPSHOT</parent.version>
</properties>
<modules>
<module>../ChildProject2</module>
<module>../ChildProject1</module>
</modules>
<dependencies> ... </dependencies>GrandParent2 pom
<groupId>GrandParent2</groupId>
<artifactId>GrandParent2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<grandparent2.version>0.0.1-SNAPSHOT</grandparent2.version>
</properties>
<modules>
<module>../Parent</module>
</modules>
<dependencies>... </dependencies>ParentMain.java
public class ParentMain {
public static void main(String[] args) {
DocumentFactory df = new DocumentFactory();
ChildProject1Main cp1 = new ChildProject1Main();
ChildProject2Main cp2 = new ChildProject2Main();
}
}ParentMain -Error
我目前正在使用Maven版本的 2.2.1 (如果可以使用升级的maven版本来解决这个问题的话),下面的评论之一可以使用“CI工具,比如Jenkins和TeamCity”来解决这个问题。任意指针(示例)如何使用Maven (或Hudson )??解决此问题
我做错了什么,如何获得这样的项目依赖关系的最佳设计?
发布于 2013-06-30 04:09:06
当我看到这个图表时,我想到的第一个问题是,“业务逻辑为什么会对子模块有任何依赖?”有两种想法浮现在我的脑海中,我将逐一分析它们,以及你不该做的事情来重复这些。
<exclude>块出现时突然丢失的依赖项。
您需要哪些代码行取决于什么是显式,以便您的代码层次结构得到了很好的布局。我将以一个基数中的箭头表示一个项目依赖于另一个项目,因此UI和CLI依赖于Business来发挥作用是有意义的。业务逻辑可以依赖子模块来完成与核心无关的其他功能,这也很有意义。
没有意义的是,这些子模型也依赖于Business。子模块应该是唯一的,它们不需要依赖任何来自Business的东西;如果它们依赖,那么也许他们应该住在那里。
至于版本控制,有一些CI工具,比如Jenkins和TeamCity,可以帮助您解决这个问题。其要旨是将其设置成独立于人为干预/错误发生的方式。
发布于 2013-06-30 11:29:56
How do I tell Maven to use the latest version of a dependency?
看一看上面的线程。我喜欢Adam的回答,使用版本插件来更新jenkins中的poms中的版本。我同意他的观点,即maven和持续部署是一个特别糟糕的匹配。
因此,使用它和一个简单的父pom来进行任何共享配置(插件、依赖项等),但不要让它们成为多模块项目和版本,并将父pom作为一个独立的东西发布。
https://stackoverflow.com/questions/17386859
复制相似问题