问:如何处理maven多项目构建的功能分支?
Jenkins构建和部署这些分支以将开发人员的构建开销保持在最低限度,但开发和功能分支无法构建相同的maven版本,否则我们将面临工件和源代码不匹配的风险。
我们有一个脚本来更改子pom中的父版本和根pom中的版本。虽然这会隔离maven空间中的分支,但在合并时会导致额外的工作。
我认为nexus pro暂存功能可能会帮助我们避免这一要求,并使每个功能分支使用特定的回购,我们可以在分支删除/合并后轻松放弃该回购。
再次强调:如何处理多个分支和maven的问题?
我们使用与Peter Kahn类似的技术,在构建之前修改分支的版本。我们的“前步骤”有三个步骤:
我非常确信,这可以用两个甚至一个步骤来完成,而且也只有一个步骤,但其背后的原则将是相同的。
我们没有在pom中更改版本的原因。分支中的xml文件确实正在合并。对于SVN,这是可能的(与--接受我的冲突合并)。对于GIT,这不再存在,因此我们停止更改版本,并创建了此预构建步骤。
这不起作用会导致在整个生成过程中出现警告,并在从顶级父级运行时出现GC错误。
理想情况下,我们希望使用版本来区分特征分支和主线,因为这是正常的maven方式,分类器操作会导致各种问题。
由于maven可以将环境变量用于属性,并且我们已经使用脚本初始化了构建环境(我们还有git钩子脚本可以从分支名称设置环境变量),因此我们可以使用env来控制版本。
<groupID>my.project</groupId>
<artifactID>database</artifactId>
<version>1.2.0${env.BRANCHMODIFIER}-SNAPSHOT</version>
如果在开发我们的脚本时将BRANCHMODIFIER设置为“”
如果在功能/JIRA-30495上,我们的脚本将BRANCHMODIFIER设置为“.30495”
这在eclipse或Intellij中是如何工作的?目前还没有线索。
以下方法如何:
下面是一个简单的示例:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>branch.classifier</name>
<value>${scmBranch}</value>
<regex>(^develop)|(^master)|(^release.*)</regex>
<replacement></replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<classifier>${branch.classifier}</classifier>
</configuration>
</plugin>
</plugins>
</build>
下面的代码段基本上是动态填充scm分支
属性,然后将branch.classifier
设置为其值,仅当与开发
、master
或发布*
不同时,然后将其设置为分类器。
这种方法的主要优点:
>
示例因此,您将生成以下工件:
RC
此方法的警告:
正如下面通过注释进行的讨论所解释的,如果相关Maven项目已经通过模块间依赖关系(例如,依赖于另一个模块的测试范围类)使用了分类器,甚至更多,那么应该仔细测试这种方法,因为它可能有一些缺点
问题内容: 我意识到我的一个项目使用slf4j 1.5.8,而Hibernate使用slf4j 1.6。在使用Maven进行构建时,它会下载两个jar,但是我猜想使用了1.5.8的类文件。因此,当我运行程序时,出现以下错误: 在我把 1.5.8是依赖项的一部分,因此可以单独下载。 问题答案: 您发现自己时,有两个库(Hibernate和其他一些库)以两个不同的版本可传递地导入SLF4J。不幸的是,
问题内容: 我的Maven配置有一个小问题。此处的所有其他问题和答案都不能解决我的问题,因此,我开始了一个新问题。 我的问题是,我的Maven没有使用本地存储库。它总是从远程存储库中获取工件。 当下载工件或构建项目时,它将安装在本地存储库中,因此路径正确。 问题是:当我构建一个SNAPSHOT项目时,它仅安装在本地存储库中(应该是这样,不想每次都将其发布在我的关系上)。当我在pom.xml中构建另
我的Maven配置有一个小问题。这里所有其他的问题和答案都没有解决我的问题,所以我要开始一个新的问题。 我的问题是,我的Maven没有使用本地存储库。它总是从远程存储库中获取工件。 当下载工件或构建项目时,它被安装在本地存储库中,因此路径是正确的。 问题是:当我构建一个快照项目时,它只安装在本地存储库中(应该是这样的,不要每次都在我的nexus上发布)。当我构建另一个项目时,在pom.xml中有前
我正在尝试使用Spring启动应用程序将图像上传到azure blob。我得到了下面的错误 2022-02-02 23:28:39【qtp1371397528-21】信息16824 c.a.c.i.jackson。JacksonVersion-信息:包版本:jackson annotations=2.12.4,jackson core=2.12.4,jackson databind=2.12.4,
这很可能通过Nexus配置得到解决。 我们使用maven进行hadoop开发。Nexus被配置为所有存储库的镜像,存储库被添加到Nexus公共组中。(参见Nexus中有没有更好的配置存储库的方法?) 我发现hadoop-core工件版本1.0.4显示来自spring-roo-repositoryhttp://spring-roo-repository.springsource.org/releas
问题内容: 在构建具有许多依赖项的Maven项目时,其中一些依赖项依赖于同一库,但使用的版本不同,这会在运行应用程序时导致错误。 例如,如果我添加两个不同的项目依赖项,A和B都依赖于apachecommonshttp客户端,但每个依赖于不同版本,则一旦类加载器加载了A的apachecommons http客户端类,B就会尝试使用它们,因为它们已经由类加载器加载。 但是B的字节码取决于所加载类的不同