Maven多模块项目
我没有广泛使用Maven
目前有5个不同的Maven项目,每个项目都有不同的pom.xml。 截至目前,它们之间存在依赖关系,如果需要,每个指向<依赖项>中的其他项。
目前我们不喜欢的东西是
我的想法是(可能不正确)
胖箭头表示父子关系, 细箭头表示子模块。 但是这似乎并不奏效,请参阅下面的代码和错误
儿童项目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 - 错误项目构建错误:不可解析的父POM:未能传输父:父:pom:http://repo1.maven.org/maven2中的$ {parent.version}被缓存在本地存储库中,解析不会重新尝试,直到中央的更新间隔已过或强制更新。 原始错误:无法传输工件父级:父级:pom:$ {parent.version} from / to central(http://repo1.maven.org/maven2):索引45处路径中的非法字符:http:// repo1 .maven.org / maven2 / Parent / Parent / $ {parent.version} /父 - $ {parent.version} .pom和'parent.relativePath'指向错误的本地POM
父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 - 错误
我目前正在使用Maven版本 2.2.1(开放升级,如果这可以使用升级Maven版本解决)下面的一个评论说可以使用“CI工具,如Jenkins和TeamCity”解决这个问题.. 任何指针(示例)如何使用Maven(和/或Hudson)解决这个问题?
我做错了什么,如何为这样的项目依赖关系获得最佳设计
当我看到这个图时,我想到的第一个问题是“为什么业务逻辑对子模块有任何依赖关系?” 想到两个想法,我会通过他们每个人,以及你不应该做的重复这些。
紧密耦合的代码。 这表现在代码重复或大类/方法的气味。
你希望你的代码是模块化的 ,这样一个项目只依赖于它需要什么来编译和运行而不会出错。
不合逻辑的代码层次结构。 这(最终)表现为循环依赖关系,或者当<exclude>
块出现时突然丢失的依赖关系。
你需要明确什么取决于什么,以便你的代码层次结构很好地布局。
我将用一个基数来表示一个项目依赖于另一个项目,因此UI和CLI依赖于业务逻辑的功能是有道理的。 这也是有道理的,商业逻辑可以依赖于儿童模块来做一些与核心不相关的其他功能。
没有意义的是,这些儿童模型也取决于业务逻辑。 儿童模块应该足够独特,不需要依赖商业逻辑中的任何东西; 如果他们这样做,那么也许他们应该住在那里。
至于版本控制 - 那里有CI工具,比如Jenkins和TeamCity,可以帮助你解决这个问题。 推力应该是这样设置,使得它独立于人为干预/错误而发生。
我如何告诉Maven使用最新版本的依赖关系?
看看上面的线程。 我喜欢Adam Gent的答案,使用版本插件来更新jenkins中的poms版本。 我同意他的看法,即部署和持续部署是一个特别糟糕的比赛。
因此,对于任何共享配置(插件,依赖关系等),使用它和一个简单的父pom,但不要让它们成为多模块项目和版本,并将父pom作为独立的东西发布。
链接地址: http://www.djcxy.com/p/37579.html