如何获取Maven依赖JAR(不是完整路径)的名称作为pom.xml变量

时间:2015-08-06 19:32:33

标签: java maven variables dependencies maven-3

看起来可以将path/to/a/dependency.jar作为Maven pom.xml中的可扩展变量:请参阅Can I use the path to a Maven dependency as a property?您可以将表达式扩展为像{{{{}}这样的字符串1}}。

我想要而不是我本地Maven存储库中依赖JAR的完整路径只是JAR的裸名称,例如/home/pascal/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar

例如,在我的junit-3.8.1.jar中,我希望能够使用pom.xml之类的值扩展为${maven.dependency.junit.junit.jar.name}

我可以这样做吗?

2 个答案:

答案 0 :(得分:1)

不,我很抱歉地说这是不可能的。所以,你有两个选择。 1)修改maven源代码并提供修改。 2)编写自己的插件。 我推荐第二种选择。编写插件并不难。作为一个哲学原理,选择一个常用的插件,其功能接近您想要完成的功能。阅读并理解代码,然后对其进行修改以达到您的目的。

因此,对于您的示例,您可能会查看过滤器插件。 Ant插件中还有一些有趣的语法。它允许您命名依赖项并将这些jar文件名放入嵌入式Ant脚本中。

祝你好运。 : - )

作为一种更实用的替代方案,您可能会分解并使用您正在使用的确切版本号手动编写属性值。您不会经常切换版本号,对吗?这只是你正在处理的一个罐子,对吗?

答案 1 :(得分:1)

您可以使用maven-antrun-plugin获取依赖项的文件名。 Ant有一个<basename>任务,它从路径中提取文件名。如Can I use the path to a Maven dependency as a property?中所述,依赖项的完整路径名在ant中可用${maven.dependency.groupid.artifactid.type.path}。这使我们能够使用如下的ant任务提取文件名:

<basename file="${maven.dependency.groupid.artifactid.type.path}" property="dependencyFileName" />

这会将文件名存储在名为dependencyFileName的属性中。

为了在pom中使用此属性,需要启用maven-antrun-plugin的exportAntProperties配置选项。此选项仅在插件的1.8版本中可用。

此示例显示了用于检索junit依赖项的工件文件名的插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <configuration>
                <exportAntProperties>true</exportAntProperties>
                <tasks>
                    <basename file="${maven.dependency.junit.junit.jar.path}"
                                      property="junitArtifactFile"/>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>