Maven版本插件:从maven依赖项引用rule.xml?

时间:2014-09-30 12:20:08

标签: java maven versions-maven-plugin maven-wagon-plugin

我正在使用mvn versions:display-dependency-updates versions:display-plugin-updates目标来检查依赖项或插件更新。

我的maven项目是一个多模块项目,如下所示:

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

由于有一些不需要的更新,比如我不想要的测试版,我已经制作了一个过滤器(可行)。我这样用它:

<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>

我被迫使用个人资料和属性version.rules.uri,因为它必须引用现有文件(默认情况下它指向./build-config/rules.xml,但它也在我的settings.xml中绝对路径。)

我想通过以下方式避免这种情况:

  • 发布独立的build-config项目
  • 使用一些uri引用此项目:m2:myGroupId:myArtifactId:version:scope:jar/rules.xml

现在的问题是:是否有Maven Wagon插件(由maven版本插件使用)的实现,允许读取诸如jar的存储库条目?

2 个答案:

答案 0 :(得分:3)

这对我有用:

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

有关变量$ {session.executionRootDirectory}的含义,请参阅 Finding the root directory of a multi module maven reactor project

答案 1 :(得分:1)

基于the documentation for the plugin,这是可能的:

  

如果要将规则集xml分发为Maven工件,则也可以在jar中提供规则集xml文件。因此,必须将包含的jar声明为versions-maven-plugin的直接依赖项,并使用classpath作为协议。

我只是尝试了一下,然后开始工作。

为新的版本规则工件创建一个新文件夹,如下所示:

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

pom.xml非常简单:

    ...
    <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>
    ...

运行mvn install来安装此工件。

然后,在另一个pom中,按如下方式配置版本插件:

    ...
    <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>
    ...