2012-03-14 1 views
5

У меня есть профиль Maven и хочу задать свойство, которое в дальнейшем доступны в System.getProperty (..) в Java:set java системное свойство во время maven 2 компилировать?

<profile> 
    <id>local-dev</id> 
    <properties> 
    <my.comp.my.prop>myValue</my.comp.my.prop> 
    </properties> 
</profile> 

Я хочу System.getProperty("my.comp.my.prop") быть "myValue" но это null .. Как Я правильно его установил? :)

Thansk!

+0

ли вы на самом деле означает «собрать»? Или, может быть, модульные тесты? – bmargulies

+0

Что вы подразумеваете под "later available"? Вы устанавливаете системное свойство, например, используя '-Dmy.comp.mu.prop = foo' при выполнении приложения. –

+0

Где-то в моем боковом коде сервера я хочу прочитать свойство делать разные вещи при компиляции в разных профилях компиляции. – Stuck

ответ

1

maven не может установить свойство, доступное вашему приложению из среды во время выполнения.

Вместо этого вы можете использовать maven для обновления файла свойств в своей кодовой базе во время сборки, который затем может быть прочитан вашим приложением во время выполнения. Различные значения свойства могут быть установлены на основе профиля, что позволяет вашему приложению иметь разные значения по желанию.

В качестве альтернативы вы можете вызвать приложение, задающее требуемое свойство в среде вручную (вне maven).

+0

Спасибо! Существует ли стандартная процедура создания и чтения такого файла свойств? – Stuck

+0

Для дальнейших читателей это делается с использованием возможности фильтрации Maven Resources Plugin: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html –

10

properties-maven-plugin плагин поможет вам сделать именно то, что вы ищете:

<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>my.property.name</name> 
         <value>my.property.value</value> 
        </property> 
       </properties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Это дает мне: нераспознанный тег: «исполнение ' – Matt

+1

Если я правильно понимаю, это устанавливает свойства для жизненного цикла maven, поэтому они не доступны для java во время выполнения. Я пробовал, это не удастся. Я не прав? –

+0

@ yegor256 Если вы все еще там в SO: я думаю, что говорит Джон Б, имеет смысл. Свойства здесь для жизненного цикла maven. Я положил -1 для вашего ответа, который, как я чувствую, неверен в контексте Q. Я подниму его, если вы сможете уточнить комментарии Джона. – dirai

Смежные вопросы