看起来可以将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}
。
我可以这样做吗?
答案 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>