有几个类似的问题,但没有像这样。如何处理这种情况(典型场景):
一个由8-11个子项目组成的项目,有一个父项目/项目和一个主要项目,主要使用/声明其他项目为模块。
问题是,所有项目“严格地”只共享公共依赖项,比如testng, logging, apache commons and stuff。但与3一样,它们中的3种使用50%-60%相同的特定deps (apache-化学、野兔、abdera等),另外2-3种也使用50%-60%的相同但不同的依赖。而主程序使用的是许多相同的deps.
我不能把那些“非严格的”共享deps放到父项目中,让其他人继承它们。所以只有普通的代言人才是遗传的。而且还有很多重复的依赖关系。我只能通过<dependencyManagement>来管理他们的版本。
另一种选择是让父pom包含大部分依赖项,但是子项目继承的甚至是他们不需要的。
我可以有一个以上的家长项目,但感觉不对。此外,来自父项目的继承可能是一场噩梦,因为如果不正确地记录/注释父pom定义,您就不知道项目需要什么依赖项。
另一种方法是创建仅作为依赖容器的pom构件--它们声明特定的依赖组,这样模块就可以声明这些组件以获得传递的依赖关系。但是,嘿,你愿意部署并提交某种
OneDepArtifact声明jackrabit, abdera, chemistry
AnotherDepArtifact声明htmlcleaner, google-api, tika
ThirdDepArtifact声明spring, httpclient, selenium
这是一个巨大的混乱,我不确定我是否正确地使用了<dependencyManagement>,它似乎只对管理依赖型版本有用。
我正在考虑将我的应用程序开发适应"maven多模块设计“。但是,如果您想创建spring服务/bean,只使用不同的库,在一个模块中,您不会在不同的模块中实现它们,仅仅是因为它们使用的是库,而其他模块也使用:-)
发布于 2011-07-19 17:57:29
Maven 3.1应该通过引入"mixins“来解决这个问题。与此同时,我似乎可以通过适当使用概要文件获得大多数所需的特性,正如我在这篇博客文章中所描述的那样:
http://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/maven-pom-composition-means-profiles
请让我知道你是否觉得它有用。
发布于 2011-06-14 21:59:21
我知道你说过这可能是一场噩梦,但我强烈认为继承父母的遗产是可行的。
我在这个答案中描述了一个很好的多模块项目结构.它还描述了使用聚合器和父链继承。
有些东西能帮你保持组织和理智..。
parent1和parent2。使用名称来描述他们配置的依赖项和其他东西,这样人们就可以直观地知道什么时候使用哪种。mvn dependency:tree,显示了项目的所有依赖项,mvn dependency:analyze命令显示了未使用的依赖项。希望有了这个建议,父POM文件继承不会显得那么复杂和可怕。祝好运!
发布于 2011-06-14 19:50:19
如果它主要是关于版本(数字)控件--为什么不将依赖版本指定为父项目中的属性,并在子项目中使用它,如
亲本
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo.bar</groupId>
<artifactId>maven-parent</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<properties>
<log4j.version>1.2.16</log4j.version>
</properties>
</project>儿童
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>maven-parent</artifactId>
<groupId>foo.bar</groupId>
<version>0.0.1</version>
</parent>
<groupId>foo.bar</groupId>
<artifactId>maven-child</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</project>这是一个简单的解决方案,允许您用一致的版本号指定特定的项目依赖项。
https://stackoverflow.com/questions/6347913
复制相似问题