Как извлечь данные свойств из профиля в родительском pom.xml?

1

У меня большой проект Java, и каждая часть этого проекта имеет дочерний pom.xml. У родительского помпа есть ключевые данные, которые я хочу, имя пользователя и пароль. Мой вопрос в том, как я могу извлечь эти данные из родительского pom.xml в моей java-программе?

Родительский pom.xml имеет множество профилей в разделе профиля, где мне нужны данные. Я нашел аналогичный пример, в котором сказано просто System.getProperty('property.name'); Когда я попробовал это, код просто вернул null. Я думаю, что это потому, что я запускал код из target каталога, а не через Maven, но я мог быть совершенно неправ.

Кто-нибудь знает, что мне не хватает?

С Уважением,

Теги:
maven

2 ответа

1

Мой ответ явно противоречит тому, что предложил @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 );
  }
}
  • 0
    Хотя это действительно возможно для извлечения свойств maven в качестве системных свойств, это не означает, что они должны использоваться для подачи приложения. Развертываемость зависит от контекста сборки. Если вы не всегда запускаете приложение в одной и той же JVM после сборки, эти свойства не будут существовать во время выполнения. Вспомните случай, когда вы запускаете сборки CI, а затем развертываете в другом месте. Ваши свойства просто не будут там существовать.
  • 0
    Я абсолютно думал о почти каждой целевой среде. Несмотря на мой ответ не имеет права быть целью производства, а скорее отвечает потребностям пользователя.
1

Maven - это инструмент построения (и многое другое). Ваша программа не знает своего существования. Пример, на который вы, вероятно, ссылаетесь, использует некоторое системное свойство, доступное как для maven, так и для вашего кода. Вы можете ссылаться на свойства системы в maven. Это просто.

см. ссылку

Любое свойство, которое может быть извлечено из метода System.getProperty(), может быть ссылкой как свойство Maven.

  • 0
    Спасибо за информацию @ Grid. :) Это помогло некоторым, но я все еще не совсем понимаю, как извлечь данные из родительского файла pom.xml. : /
  • 0
    Если я понял, что вы пытаетесь сделать, это получить доступ к переменным POM из кода. Это невозможно и по причине. Переменные maven предназначены для настройки сборки. После завершения сборки они не имеют никакого смысла.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню