Як отримати доступ до властивостей maven, визначених у pom у звичайному проекті maven та у проекті плагіна maven?
Як отримати доступ до властивостей maven, визначених у pom у звичайному проекті maven та у проекті плагіна maven?
Відповіді:
Використовуйте властивість-maven-plugin, щоб записати певний pom properties
у файл під час компіляції, а потім прочитати цей файл під час виконання.
У вашому pom.xml :
<properties>
<name>${project.name}</name>
<version>${project.version}</version>
<foo>bar</foo>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
А потім у .java :
java.io.InputStream is = this.getClass().getResourceAsStream("my.properties");
java.util.Properties p = new Properties();
p.load(is);
String name = p.getProperty("name");
String version = p.getProperty("version");
String foo = p.getProperty("foo");
compile
. Не впевнений, що це правильне рішення.
Налаштуйте системну змінну від Maven і в Java використовуйте наступний виклик
System.getProperty("Key");
Це можна зробити за допомогою стандартних властивостей Java у поєднанні з maven-resource-plugin
з увімкненою фільтрацією властивостей.
Для отримання додаткової інформації див. Http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
Це буде працювати для стандартного проекту maven, як і для проектів плагінів
Maven вже має рішення зробити те, що ви хочете:
Отримати MavenProject лише з POM.xml - синтаксичного аналізатора POM?
до речі: перший удар при пошуку в Google;)
Model model = null;
FileReader reader = null;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
try {
reader = new FileReader(pomfile); // <-- pomfile is your pom.xml
model = mavenreader.read(reader);
model.setPomFile(pomfile);
}catch(Exception ex){
// do something better here
ex.printStackTrace()
}
MavenProject project = new MavenProject(model);
project.getProperties() // <-- thats what you need