Как читать свойства Maven из теста JUnit?

Я использую Maven 3.0.3 с JUnit 4.8.1. В моем тесте JUnit, как я могу прочитать project.artifactId, определенный в моем файле Maven pom.xml? В моем пом, я

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.myco.pplus2</groupId>
<artifactId>pplus2</artifactId>

Но это не работает в моем тесте JUnit, чтобы получить идентификатор артефакта...

@Before
public void setUp() { 
    ...        
    System.out.println( "artifactId:" + System.getProperty("project.build.sourceEncoding") ); 
}   // setUp

Вышеупомянутые выходы "artifactId: null". В любом случае, оцените любую помощь, - Дэйв

Ответ 1

Посмотрите на systemPropertyVariables (и друзей) точно. Он делает то, что вы хотите. AFAIK нет способа просто передать все свойства maven, не перечисляя их.

Ответ 2

Свойства проекта Maven автоматически не добавляются в свойства Java-системы. Для этого существует немало вариантов. Для этой конкретной потребности вы можете определить свойство System для maven-surefire-plugin (те, которые запускают тесты), а затем использовать метод System.getProperty.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <systemProperties>
            <property>
                <name>projectArtifactId</name>
                <value>${project.artifactId}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>

Другим способом достижения свойств Maven для тестов JUnit, вероятно, будет фильтрация ресурсов для исходных исходных файлов.

PS. Чтение конфигураций Maven во время выполнения, даже в тестах, довольно грязно IMHO.:)

Ответ 3

Иногда Eclipse настроен на использование Java Builder для Project- > Automatically Build (Right Click- > Project- > Properties- > Builders)

Если это так, иногда фильтрация ресурсов не работает. У вас есть несколько вариантов:

  • Предоставить свойство в файле pom.xml, как указано выше.
  • Предоставить файл свойств и выполнить фильтрацию ресурсов Maven
  • Используйте Maven Invoker

2 и 3 описаны в http://scottizu.wordpress.com/2013/10/16/reading-the-project-version-from-the-maven-pom-file/