У меня большой проект Java, и каждая часть этого проекта имеет дочерний pom.xml. У родительского помпа есть ключевые данные, которые я хочу, имя пользователя и пароль. Мой вопрос в том, как я могу извлечь эти данные из родительского pom.xml в моей java-программе?
Родительский pom.xml имеет множество профилей в разделе профиля, где мне нужны данные. Я нашел аналогичный пример, в котором сказано просто System.getProperty('property.name');
Когда я попробовал это, код просто вернул null. Я думаю, что это потому, что я запускал код из target
каталога, а не через Maven, но я мог быть совершенно неправ.
Кто-нибудь знает, что мне не хватает?
С Уважением,
Мой ответ явно противоречит тому, что предложил @grid. Хотя Maven - это инструмент построения, но он также настолько хорош, что он может позволить себе любую функциональность, когда вы глубоко задумываетесь об этом.
Когда-то было время, когда мне нужно было подключить файл настраиваемых свойств и попросить Maven отфильтровать его с помощью свойств проекта, а затем прочитать ввод содержимого этого файла в исходном коде как java.util.Properties
.
Теперь, когда эта часть закончилась, я полагаю, поскольку все бремя для вас выполняется с помощью плагина Properties Maven, который имеет цель cutom, "свойства set-system", которые могут создавать свойства проекта (те, которые используются Maven и которые упомянуты для свойств времени сборки), доступных как свойства времени выполнения, а точнее, как свойства системы.
Вы можете добавить собственный фрагмент конфигурации плагина в свой раздел сборки, тот, который находится в вашем дочернем проекте, который может выглядеть следующим образом:
<project>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<property>
<name>property.name</name>
<value>${project.version}</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Хотя вы можете иметь любое значение, установленное для вашего свойства, обратите внимание на использование заполнителя ${...}
так что Maven разрешает свойство при интерполировании дескрипторов проекта. Вы можете ссылаться на любое свойство таким образом, а затем иметь его доступным во время выполнения, как вы предложили в своем главном сообщении:
package com.github.tmarwen.stackoverflow.maven.properties.showcase;
public Main {
public static void main( String... args ) {
String value = System.getProperty( "property.name" );
System.out.print( value );
}
}
Maven - это инструмент построения (и многое другое). Ваша программа не знает своего существования. Пример, на который вы, вероятно, ссылаетесь, использует некоторое системное свойство, доступное как для maven, так и для вашего кода. Вы можете ссылаться на свойства системы в maven. Это просто.
см. ссылку
Любое свойство, которое может быть извлечено из метода System.getProperty(), может быть ссылкой как свойство Maven.