我正在为一个项目使用maven ant任务,我遇到了从ant引用依赖关系的pom中声明的属性的需要。
具体来说,我依赖华夫饼jna:
<property name="waffle-jna-version" value="1.7" />
<artifact:dependencies ...>
<dependency groupId="com.github.dblock.waffle" artifactId="waffle-jna" version="${waffle-jna-version}">
</artifact:dependencies>
并且在其pom.xml
中,com.github.dblock.waffle:waffle-jna
声明:
<properties>
<guava.version>18.0</guava.version>
<jna.version>4.1.0</jna.version>
<servlet.version>2.5</servlet.version>
<slf4j.version>1.7.7</slf4j.version>
</properties>
我需要找出我正在构建的Waffle版本的jna和slf4j版本,然后用相同的版本添加一些相关的依赖项(例如,slf4j-simple的运行时依赖项)。
我知道我可以在maven ant任务中排除Waffle的依赖项,然后用我自己的顶级版本声明它们,但我更喜欢遵循我使用的Waffle版本所使用的版本。
有什么方法可以告诉maven ant任务向ant公开依赖pom中声明的属性吗?
我尝试导入pom,添加了对pom的附加依赖项和<artifact:pom>
:
<artifact:dependencies>
<dependency groupId="com.github.dblock.waffle" artifactId="waffle-jna" version="${waffle-jna-version}" type="pom"/>
</artifact:dependencies>
<!-- Expose the Waffle POM so we can reference its version attributes -->
<artifact:pom file="${com.github.dblock.waffle:waffle-jna:pom}" inheritAllProperties="true"/>
但是当它正确设置pom路径的属性时:
ant -debug
....
Setting project property: com.github.dblock.waffle:waffle-jna:pom -> /home/craig/.m2/repository/com/github/dblock/waffle/waffle-jna/1.7/waffle-jna-1.7.pom
Adding reference: com.github.dblock.waffle:waffle-jna:pom
....
[artifact:pom] Maven Ant Tasks version: 2.1.3
BUILD FAILED
/home/craig/projects/2Q/pgjdbc/build.xml:148: java.lang.NullPointerException
at java.util.Hashtable.get(Hashtable.java:334)
at org.apache.tools.ant.Project$AntRefTable.getReal(Project.java:2409)
at org.apache.tools.ant.Project$AntRefTable.access$000(Project.java:2394)
at org.apache.tools.ant.Project.addReference(Project.java:1973)
at org.apache.maven.artifact.ant.Pom.doExecute(Pom.java:423)
at org.apache.maven.artifact.ant.AbstractArtifactTask.execute(AbstractArtifactTask.java:751)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
....
所以我无计可施。我宁愿全部使用Maven,但不幸的是,目前这不是我可以单方面做出的决定。
上面的pom导入语句:
<!-- Expose the Waffle POM so we can reference its version attributes -->
<artifact:pom file="${com.github.dblock.waffle:waffle-jna:pom}" inheritAllProperties="true"/>
与maven ant tasks pom文档中的内容略有不同:
<artifact:pom id="mypom" file="pom.xml" />
你错过了id="mypom"
作业。
它将允许您按名称引用属性,如${mypom.properties.jna.version}
请注意,必须明确指定属性节点的路径;属性不会直接添加到mypom
下,而是出现在mypom.properties
下,反映了pom.xml
结构。(这也意味着从父pom继承的属性不会被公开)。