2016-11-14 63 views
1

我有一个Maven聚合器项目X,包含模块A和B.在我的交付管道的第一阶段,我想构建X的当前快照版本,但强制所有依赖项都是发布版本。 (目的是确保项目处于可释放状态,其中发布必须不具有快照依赖性。)强制发布依赖关系,除了来自同一版本的模块

A和B以X作为它们的父项,并且(使事情复杂化)B具有A作为依赖项。 (我配置了Maven Enforcer插件来应用Reactor Module Convergence规则。)

是否有可能说服maven-enforcer插件强制执行所有依赖项的发布版本,除了当前reactor构建中的项目?

回答

1

Maven Enforcer PluginrequireReleaseDeps规则中内置了导入/导出机制。例如,如果你想要求所有的依赖使用发布版本,除了那些位于组ID my-group-id,你会:

<requireReleaseDeps> 
    <message>No Snapshots Allowed!</message> 
    <excludes> 
    <exclude>my-group-id:*</exclude> 
    </excludes> 
</requireReleaseDeps> 

的字符串传递给包括或不包括在该AbstractStrictPatternArtifactFilter类记录:它们遵循格式[groupId]:[artifactId]:[type]:[version],其中每个部分也可以包含通配符*

如果反应堆中的所有项目共享相同的组ID,则此方法正常工作。您还可以添加更多<exclude>元素,通过指定每个项目标识来专门定位每个项目。 MENFORCER-185是一个增强请求,用来添加allowSnapshotsInReactor布尔值和处理来自反应器的项目,与include/exclude不同,它提供了一个更清晰的解决方案,但至今尚未解决。

+0

急切地等待MENFORCER-185在下一个版本的插件中发货! – Rinke

1

scijava-maven-plugin提供了一个名为requireReproducibleBuilds的执行者规则,该规则强制反应堆外的所有依赖关系是释放,同时允许反应堆模块之间的快照。

添加以下到maven-enforcer-plugin<dependencies>部分:

<dependency> 
    <groupId>org.scijava</groupId> 
    <artifactId>scijava-maven-plugin</artifactId> 
    <version>1.0.0</version> 
</dependency> 

而下面为maven-enforcer-plugin配置的<rules>部分:

<!-- 
Require builds to be reproducible. 
This means no snapshot dependencies! 
--> 
<requireReproducibleBuilds implementation="org.scijava.maven.plugin.enforcer.RequireReproducibleBuilds"> 
    <groupIds>org.foo,org.bar</groupIds> 
</requireReproducibleBuilds> 

org.fooorg.bar是你想要的部件的组id以确保具有可重现的依赖性结构。

有关示例配置,请参阅here

+0

感谢您的选择 – Rinke