Укажите системное свойство для проекта Maven - PullRequest
62 голосов
/ 12 июля 2010

Есть ли способ (я имею в виду, как мне) установить системное свойство в проекте maven?

Я хочу получить доступ к свойству из моего теста и моего веб-приложения (работающего локально), и я знаю, что могуиспользовать системное свойство Java.

Должен ли я вставить это в ./settings.xml или что-то в этом роде?

Контекст

Я взял проект с открытым исходным кодом и мне удалось изменитьконфигурация базы данных для использования JavaDB

Теперь в URL-адресе jdbc для JavaDB местоположение базы данных может быть указано как полный путь (см .: этот другой вопрос )

Или системное свойство: derby.system.home

У меня уже работает код, но в настоящее время он жестко запрограммирован на:

 jdbc:derby:/Users/oscarreyes/javadbs/mydb

И я хочу удалить полный путь коставьте это как:

 jdbc:derby:mydb

Для этого мне нужно указать системное свойство (derby.system.home) для maven, но я не знаю как.

Тест проводится с использованием junit (я не вижу плагинов в pom.xml), а веб-приложение работает с плагином Jetty.

Задание системного свойства в командной строке, похоже, работает для молы, но я не уверен, что это что-то практичное (если некоторые другие пользователи могут запускать его из eclipse / idea / what)

Ответы [ 4 ]

69 голосов
/ 13 июля 2010

Есть ли способ (я имею в виду, как мне) установить системное свойство в проекте maven? Я хочу получить доступ к свойству из моего теста [...]

Вы можете установить системные свойства в конфигурации Maven Surefire Plugin (это имеет смысл, поскольку тесты по умолчанию разветвляются) От Использование системных свойств :

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <systemPropertyVariables>
            <propertyName>propertyValue</propertyName>
            <buildDirectory>${project.build.directory}</buildDirectory>
            [...]
          </systemPropertyVariables>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

и мое веб-приложение (работает локально)

Не уверен, что вы здесь имеете в виду, но я предполагаю, что контейнер веб-приложений запущен Maven. Вы можете передать системные свойства в командной строке, используя:

mvn -DargLine="-DpropertyName=propertyValue"

Обновление: Хорошо, теперь понятно. Для Jetty вы также должны иметь возможность установить системные свойства в конфигурации плагина Maven Jetty. С Настройка системных свойств :

<project>
  ...
  <plugins>
    ...
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <configuration>
         ...
         <systemProperties>
            <systemProperty>
              <name>propertyName</name>
              <value>propertyValue</value>
            </systemProperty>
            ...
         </systemProperties>
        </configuration>
      </plugin>
  </plugins>
</project>
60 голосов
/ 31 октября 2012

properties-maven-plugin Плагин может помочь:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0.0</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>
9 голосов
/ 28 декабря 2013

Я узнал, что это также возможно сделать с помощью exec-maven-plugin, если вы делаете "автономное" Java-приложение.

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${maven.exec.plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>${exec.main-class}</mainClass>
                <systemProperties>
                    <systemProperty>
                        <key>myproperty</key>
                        <value>myvalue</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
        </plugin>
2 голосов
/ 13 июля 2010

Если ваш тест и веб-приложение находятся в одном проекте Maven, вы можете использовать свойство в проекте POM. Затем вы можете отфильтровать определенные файлы, что позволит Maven установить свойство в этих файлах. Существуют разные способы фильтрации, но самый распространенный - на этапе ресурсов - http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

Если тест и веб-приложение находятся в разных проектах Maven, вы можете поместить это свойство в settings.xml, который находится в папке вашего хранилища maven (C: \ Documents and Settings \ username.m2) в Windows. Вам все еще нужно будет использовать фильтрацию или другой метод для чтения свойства в тесте и веб-приложении.

...