Maven versions plugin: reference a rule.xml from a maven dependency?

十年热恋 提交于 2019-12-06 00:59:37

问题


I am using the mvn versions:display-dependency-updates versions:display-plugin-updates goals to check for dependencies or plugins updates.

My maven project is a multi module one, which looks like this:

moduleA
 |- moduleB1
 |    |- moduleC  
 |- moduleB2
 |- build-config/rules.xml

Since there is some unwanted updates, like betas I don't want, I've made a filter (which works). I use it like that:

<profile>
  <id>maven-version-plugin-1</id>
  <activation>
    <property>
      <name>version.rules.uri</name>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <configuration>
          <rulesUri>${version.rules.uri}</rulesUri>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

I am forced to use a profile and a property version.rules.uri because it must refer to an existing file (by default it points to ./build-config/rules.xml, but it is also in my settings.xml with an absolute path).

I'd like to avoid that by:

  • publishing an independent build-config project
  • referencing this project using some uri: m2:myGroupId:myArtifactId:version:scope:jar/rules.xml

Now the question: is there an implementation of Maven Wagon Plugin (which is used by maven versions plugin) that allow for reading a repository entry such as a jar ?


回答1:


Based upon the documentation for the plugin this is possible:

You can provide your ruleset xml file also within a jar, if you want to distribute your ruleset xml as Maven artifact. Therefore you have to declare the containing jar as direct dependency of the versions-maven-plugin and to use classpath as protocol.

I just tried it out and got it to work.

Create a new folder for the new version-rules artifact, as so:

version-rules
  |- files
       \- version-rules.xml
  \- pom.xml

The pom.xml is pretty basic:

    ...
    <artifactId>my-version-rules</artifactId>
    <packaging>jar</packaging>

    <build>
        <defaultGoal>package</defaultGoal>
        <resources>
            <resource>
                <directory>files</directory>
                <filtering>false</filtering>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    ...

run a mvn install to install this artifact.

Then, in the other pom, you configure the versions plugin as follows:

    ...
    <build>
        ...
        <pluginManagement>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>2.7</version>
                    <configuration>
                        <rulesUri>classpath:///version-rules.xml</rulesUri>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.mycompany</groupId>
                            <artifactId>my-version-rules</artifactId>
                            <version>1.0-SNAPSHOT</version>
                        </dependency>
                    </dependencies>
                </plugin>
                ...
            </plugins>
            ...
        </pluginManagement>
        ...
    </build>
    ...



回答2:


This works for me:

<rulesUri>file:///${session.executionRootDirectory}/maven-version-rules.xml</rulesUri>

For the meaning of the variable ${session.executionRootDirectory}, see Finding the root directory of a multi module maven reactor project



来源:https://stackoverflow.com/questions/26120704/maven-versions-plugin-reference-a-rule-xml-from-a-maven-dependency

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!