[英]Versions Maven Plugin rules that are inheritable
当运行版本Maven 插件mvn versions:display-dependency-updates
时,我看到很多这样的事情:
[INFO] org.slf4j:slf4j-api ........................... 1.7.36 -> 2.0.0-alpha7
但仅仅因为我没有使用更高版本的 alpha 版本并不意味着我没有使用最新的可用发布版本。 另一个Stack Overflow 答案表明我可以设置一个rules.xml
文件来忽略*.-alpha*
之类的版本,在我的 POM 中放置这样的内容:
<configuration>
<rulesUri>file:///${project.basedir}/rules.xml</rulesUri>
</configuration>
我的问题:这个rules.xml
文件可以继承吗? 如果我将它放在<packaging>pom</packaging>
的父 POM 中的单独项目中,发布到 Maven Central,子 POM 会接受它吗? 或者子项目会在子项目目录中查找rules.xml
文件吗?
我想在父 POM 中配置versions-maven-plugin
(就像我已经做的那样)并在任何子 POM 或后代 POM 上运行mvn versions:display-dependency-updates
。 如何在父 POM 中设置忽略规则,以便在我检查子 POM 中的依赖项更新时选择这些版本忽略规则? (有没有办法将规则包含在 POM 本身中?)
或者子项目会在子项目目录中寻找rules.xml文件吗?
是的,如果您通过${project.basedir}
定义rules.xml
文件,它将解析到子项目的当前本地基目录。 我已经通过简单的父子 pom 设置验证了这一点。 所以这行不通,除非您在每个项目中复制规则文件。
如果您希望在父 pom 中包含插件配置和规则集而不复制规则文件,您有两种选择:
例如,如果您将规则集 xml 文件托管在http://www.mycompany.com/maven-version-rules.xml ,那么您公司 pom 中的以下配置将确保所有项目都使用此规则集。
<configuration>
<rulesUri>http://www.mycompany.com/maven-version-rules.xml</rulesUri>
</configuration>
或者
如果您想将您的规则集 xml 作为 Maven 工件分发,您也可以在 jar 中提供您的规则集 xml 文件。 因此,您必须将包含的 jar 声明为 versions-maven-plugin 的直接依赖项,并将类路径用作协议。
<configuration>
<rulesUri>classpath:///package/foo/bar/rules.xml</rulesUri>
</configuration>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>version-rules</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
资源:
pom 中的配置只有基本的includes
和excludes
过滤器。 这些将允许您将任何依赖项作为一个整体排除,但不能排除特定的更新版本。 据我从可用文档中可以看出,无法以任何其他方式定义版本规则。
看
从 Github 在这里粘贴我的答案,因为我认为它可能会使其他人受益。
假设您的项目中有一个名为rules-test
的目录,其中包含规则模板文件:
<ruleset comparisonMethod="maven"
xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0
https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
<ignoreVersions>
<ignoreVersion type="regex">${ignoredVersions}</ignoreVersion>
</ignoreVersions>
</ruleset>
然后,在您的主项目中,创建以下配置文件:
<profile>
<id>rules-test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>rules-test</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${project.basedir}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.12.0</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>display-dependency-updates</goal>
</goals>
<configuration>
<rulesUri>file://${project.basedir}/compiled-rules.xml</rulesUri>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
如果您随后执行以下 Maven 目标:
mvn -P rules-test "-DignoredVersions=.*-(M\d*|.*-SNAPSHOT)" clean validate
然后您将使用-DignoredVersions
参数中的过滤器获得依赖关系报告(过滤掉*-M*
和*-SNAPSHOT
)。
如果你把你的ignoredVerions
属性放在你的项目中,而不是将它作为 -D 参数传递,那么它将是可继承的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.