多模块maven版本,每个模块带有标签
假设基于Maven的Java项目的以下项目结构:
xx-parent
xx-moduleA
xx-moduleB
xx-moduleC/submodule1
xx-moduleC/submodule2
xx-moduleC/submodule3
Run Code Online (Sandbox Code Playgroud)
Subversion中的项目结构如下:
xx-parent/trunk
xx-moduleA/trunk
xx-moduleB/trunk
xx-moduleC/trunk/submodule1
xx-moduleC/trunk/submodule2
xx-moduleC/trunk/submodule3
Run Code Online (Sandbox Code Playgroud)
我的目标是在执行发布时为每个模块创建标记:
xx-parent/tags/xx-parent-1.0
xx-moduleA/tags/xx-moduleA-1.0
xx-moduleB/tags/xx-moduleB-1.0
xx-moduleC/tags/xx-moduleC-1.0
Run Code Online (Sandbox Code Playgroud)
过去,每个模块都是单独构建和发布的.随着项目规模的扩大(30个模块),构建版本的时间增加了.我想将项目更改为多模块设置以执行反应堆构建和发布.构建似乎不是问题,但每个模块创建标签是.
maven-release-plugin似乎坚持只为整个项目/发布制作一个标签.我正在寻找一种创建多个标签的方法,例如每个模块的标签.
<module>../xx-moduleB</module><scm>元素pom.xml,但在执行反应器释放时不会使用它们.mvn --batch-mode -DcommitPerProject=true -DautoVersionSubmodules=true -Drelease.version=1.0.6 release:prepare release:perform<scm>用无效的URL 覆盖标记,例如xx-parent标记下的嵌套"trunk"-tags如何使用Maven发布流程,多模块布局设置此项目,并且每个模块仍然可以获得单独的标签?
http://jira.codehaus.org/browse/MRELEASE-261 (已关闭)和MRELEASE-561(开放)
请考虑以下企业应用程序分层示例:
在Maven中组织这个的正确方法是什么.我应该创建一个多模块maven项目吗?如果'project-services'是Maven模块,它是否可以与其他三个项目共享,每个项目都是一个独立的可部署单元?
在我以前的项目中,我只创建了4个不同的Maven项目,从来没有感到需要任何其他东西.
想验证是否有比以前更好的方式.
我想将我的连续整合工作(Hudson)分成两个步骤.(因为一起构建和报告的运行时间太长.)在第一个工作中,我成功地使用"mvn package" 构建了我的多模块maven项目.然后我将我的工作区复制到另一个位置并尝试仅使用目标"site"和/或findbugs/checkstyle/pmd再次构建项目以创建报告.但这不起作用!Maven 无法解析子模块的依赖关系.(但是所有JAR都可以在其目标文件夹中使用.)
示例:我的结构如下所示:
项目C具有依赖项目B.
当我使用"mvn site"构建所有内容时,它会为项目A和B生成所有报告.但在项目C停止,并显示错误消息"无法解析项目B的依赖项".但是项目B已经用"mvn package"构建.即我可以在其目标文件夹中找到项目B的JAR文件.
有没有办法在没有"mvn install"的情况下解决子模块B的依赖关系?(我不想在我的ci服务器上执行此操作.我担心对于具有相同代码库的其他作业可能会有危险.)
更新08/20/12:
根文件夹的POM:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Foo</name>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>parent</module>
</modules>
</project>
Run Code Online (Sandbox Code Playgroud)
父POM:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Foo</name>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>../bar-a</module>
<module>../bar-b</module>
<module>../bar-c</module>
<module>../bar-d</module>
</modules>
[...]
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.1</version>
[...]
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.7.1</version>
[...]
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.9.1</version>
[...]
</plugin>
</plugins>
</reporting>
</project> …Run Code Online (Sandbox Code Playgroud) 我有以下项目以扁平结构的方式组织:
parentProject
+-pom.xml
projectWeb <depends on libraryA and libraryB>
+-pom.xml
libraryA
+-pom.xml
libraryB
+-pom.xml
Run Code Online (Sandbox Code Playgroud)
parentProject中的pom.xml引用了其他模块,并用于继承和dependencyManagement,这里是一个片段:
<project>
....
<modules>
<module>../projectWeb</module>
<module>../libraryA</module>
<module>../libraryB</module>
</modules>
<dependencyManagement>
...
</dependencyManagement>
<build>
...
</build>
....
</project>
Run Code Online (Sandbox Code Playgroud)
在Jenkins中,我为每个项目都有一个maven作业,当我构建parentProject时,它工作正常,即.构建该modules部分中引用的每个项目.我遇到的问题是当我向SVN提交更改时libraryA,我希望在构建libraryA之后,重建projectWeb将要启动,但这并没有发生.谁知道我做错了什么?
提前致谢.
编辑
当我删除该modules部分时parentProject\pom.xml,它按预期工作,但我放弃了拥有父pom的聚合优势.
原谅我.我是Maven的菜鸟.
这是我的maven项目目录:
project/
pom.xml
moduleA/
moduleB/
sub-moduleA/
sub-moduleB/
sub-moduleC/
moduleC/
Run Code Online (Sandbox Code Playgroud)
当然,在每个模块和子模块中,它们都有自己的模块和子模块pom.xml.此外,在此示例中moduleB取决于moduleA并moduleA取决于moduleC.我知道在maven中它经历了多个阶段,但是它每次只需要一个阶段,或者每个阶段一个.眼下,只有三个阶段,我关心的是compile,package和install.
例如:
是否在订单1中执行此操作:
compile moduleC
compile moduleA
compile moduleB
package moduleC
package moduleA
package moduleB
install moduleC
install moduleA
install moduleB
Run Code Online (Sandbox Code Playgroud)
或者它是在第2顺序中执行的:
compile moduleC
package moduleC
install moduleC
compile moduleA
package moduleA
install moduleA
compile moduleB
package moduleB
install moduleB
Run Code Online (Sandbox Code Playgroud)
或者它是以完全不同的顺序进行的,还是我完全脱离了对maven的理解?
我正在运行Maven 2.2.1.谢谢!
我刚刚开始了一个新的春季项目,这次我想做"正确"的事情.在上一个项目中,由于多个@ComponentScan注释,我遇到了多个注册某些类的问题.(即所有服务类都注册了两次)
基本上我使用以下布局:
WebAppInitializer:
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebMvcConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
Run Code Online (Sandbox Code Playgroud)
RootConfig:
@Configuration
@ComponentScan
public class RootConfig {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
WebMvcConfig:
@EnableWebMvc
@ComponentScan
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
DatabaseConfig:
@Configuration
@EnableJpaRepositories("my.base.class.path")
public …Run Code Online (Sandbox Code Playgroud) 我在Cloudbees构建服务上使用Jenkins,并且有一个多模块Maven项目.最近,我们从父pom中删除了一个项目,但是,当我们使用以下选项在Jenkins中运行构建时...
clean install -e -P qa -P cloudbees -DskipITs
Run Code Online (Sandbox Code Playgroud)
工件会自动存储到附加到我们帐户的Cloudbees快照存储库中.但是,构建最终会失败,并显示以下"无法在reactor中找到所选项目:org.mainco.subco:oldmodule"错误.有没有办法强制构建
[subco] $ mvn initialize -N
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building subco 76.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.841s
[INFO] Finished at: Fri Feb 27 21:59:22 UTC 2015
[INFO] Final Memory: 5M/115M
[INFO] ------------------------------------------------------------------------
Parsing POMs
Modules changed, recalculating dependency graph
maven31-agent.jar already up to date
maven31-interceptor.jar already up to date
maven3-interceptor-commons.jar already up to date
[subco] $ /opt/jdk/jdk1.7.0/bin/java -Dmaven.test.failure.ignore=false …Run Code Online (Sandbox Code Playgroud) 如果有两个文件具有不同的内容但在两个不同的maven模块中具有相同的名称,那么它们都与maven assembly-plugin放在一个jar文件中,只有一个文件最终成为.jar文件的一部分.
问题:有没有办法确保在构建jar文件时将文件的内容组合到一个文件中?
我显然不想手动将信息放在一起,因为这是我试图通过在不同模块中拆分项目来避免的.
编辑:我有一个自定义的Assembly-Descriptor,我想保留,即使我开始使用另一个插件.这个描述符基本上排除了所有语言,但英语排除了资源和错误文本.
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
<unpackOptions>
<excludes>
<exclude>**/*Resources_*</exclude>
<exclude>**/*ErrorsText_*</exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
Run Code Online (Sandbox Code Playgroud) 关于pom.xmlMaven文件:
我在IntelliJ中有一个多模块项目.每个模块都存储在一个单独的git存储库中.
我已经设置好了,所以我在IntelliJ中将每个标记为VCS root.
我可以使用IDE一次性拉出所有这些,还是应该使用命令行工具?目前我正逐一拉它们: