Доступ к свойствам зависимости maven-ant-tasks (объявленным в ее pom) из ant

Я использую maven-ant-tasks для проекта и столкнулся с необходимостью ссылаться на свойства, объявленные в pom зависимости от Ant.

Конкретно я в зависимости от вафли-джня:

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

Мне нужно выяснить, какие версии jna и slf4j использует версия Waffle, которую я создаю для использования, а затем добавить некоторые связанные зависимости (например, зависимость во время выполнения от slf4j-simple) с теми же версиями.

Я знаю, что вместо этого я могу исключить зависимости для Waffle в maven-ant-tasks, а затем объявить их с моими собственными версиями на верхнем уровне, но я бы предпочел следовать тем версиям, которые использует версия Waffle. с помощью.

Есть ли способ сказать maven-ant-tasks для предоставления свойств, объявленных в pom зависимостей для Ant?


Я попытался импортировать пом, с дополнительной зависимостью от пом плюс <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 для всего этого, но, к сожалению, в настоящее время это не решение, которое я могу принять в одностороннем порядке.

1 ответ

Решение

Ваше заявление на импорт пом выше:

<!-- 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 состав. (Это также означает, что унаследованные свойства от родительских poms не будут выставлены).

Другие вопросы по тегам