Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 ?

like image 778
NoDataFound Avatar asked Sep 30 '14 12:09

NoDataFound


People also ask

What is the use of versions Maven plugin?

The Versions Plugin is used when you want to manage the versions of artifacts in a project's POM.

What is the difference between plugins and dependencies in Maven?

A plugin is an extension to Maven, something used to produce your artifact (maven-jar-plugin for an example, is used to, you guess it, make a jar out of your compiled classes and resources). A dependency is a library that is needed by the application you are building, at compile and/or test and/or runtime time.

What happens if you don't specify a version in Maven?

Maven won't allow any other either. Build will fail if version is not found.


2 Answers

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.

like image 168
Sutra Avatar answered Sep 26 '22 01:09

Sutra


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>
    ...
like image 22
Buurman Avatar answered Sep 26 '22 01:09

Buurman