我appologize为这篇文章的长度,但我有麻烦使它更加简洁没有呈现的画面。 我最近继承构建主的工作的行家3.0多模块项目。 问题是,该项目/模块的结构是一场灾难。 从事物当前存储在源代码管理办法(我们使用RTC)的模块的POM结构,我在撕我的头发试图让一个完整的构建周期,每次完成。
随着项目的层次去,所有的模块都存储“平”; 即:一切都在同一水平。 我有一个父POM,和所有模块依赖于父母。 然而,父母是在同一水平作为我的所有其它模块。
例如:
c:\dev\MyEarProject
+ parent-pom
- pom.xml
+ module1
- pom.xml (depends on parent-pom)
- src
- main
- ...
+ module2
- pom.xml (depends on parent-pom)
- src
- main
- ...
+ module3
- pom.xml (depends on parent-pom)
- src
- main
- ...
父POM定义了所有建设项目,以及一群在整个不同的子模块使用神器版本号属性所需的模块:
<modules>
<module>../module1</module>
<module>../module2</module>
<module>../module3</module>
</modules>
<properties>
<org.springframework.version>3.0.5.RELEASE</org.springframework.version>
<slf4j.version>1.6.4</slf4j.version>
<repositoryAddress>${snapshots.repo.url}</repositoryAddress>
<my.hibernate-module.dao.impl>1.2.3</my.hibernate-module.dao.impl>
<my.hibernate-module.dao.api>1.2.3</my.hibernate-module.dao.api>
</properties>
每个模块的POM,反过来,取决于通过POM的神器数量父POM:
<parent>
<groupId>com.cws.cs.lendingsimulationservice</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.6</version>
</parent>
为了让事情更加混乱,实际的工件名称可能或可能不会(取决于模块),匹配模块路径。 例如,模块1可以位于路径c:\dev\MyEarProject\module1
,但具有工件名称hibernate-module
。 但是,由于它存储在RTC的方式,目录名为module1
时检查出。
构建一切最简单的方法,当然,是去到c:\dev\MyEarProject\parent-pom\
和运行mvn clean deploy
。 这工作得很好,当在拍照模式下作为快照回购允许对同一工件版本的多个部署。 但是在释放模式,此操作失败。
这种结构是造成我2个问题。
- 每次我需要做一个版本更改到父的属性,我必须更新父POM版本号和所有子模块父POM的版本,并且所有子模块本身的版本(因为家长改变)。
- 每当我需要部署一个发布周期,MVN如果将一个模块并没有从上次周期变化引发错误,因此不能被重新部署到同一回购(回购不允许覆盖现有工件)
所以我在寻找重组项目,以避免这些问题的最佳途径。 对于父POM,我知道我可以使用相对路径指向父来代替。 然而,考虑到模块的“扁平化”的结构,这是一个推荐的方法(即:父POM的相对路径将是../parent-pom/pom.xml - 似乎有点奇怪我)? 此外,考虑到父母的版本控制是独立的模块,将使用相对路径不只是开门额外的混乱(即:就没有办法知道父POM的哪个版本与版本相关的子模块)。
其次,我怎么可以创建一个没有遇到我有部署错误,整个耳朵? 由于神器已经在回购存在,我并不需要重建和重新部署。 我尝试使用--projects但所涉及的模块数,它变得非常难以管理。