2013-02-21 3 views
11

У меня есть проект, сконфигурированный для сборки и запуска с Maven. Проект зависит от специфичных для платформы собственных библиотек, и я использую найденную стратегию here для управления этими зависимостями.Использование Maven 'exec: exec' с аргументами

По существу, файлы .dll или .so для конкретной платформы упаковываются в банку и помещаются на сервер Maven с классификатором, идентифицирующим целевую платформу. Плагин maven-dependency затем распаковывает конкретную платформу платформы и копирует собственные библиотеки в целевую папку.

Обычно я использовал mvn exec:java для запуска программы Java, но exec:java запускает приложения в одной JVM как Maven, что мешает мне модифицировать путь к классам. Поскольку родственные зависимости должны быть добавлены к пути к классам, я вынужден вместо этого использовать mvn exec:exec. Это отношение фрагмент П:

... 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-Djava.library.path=target/lib</argument> 
      <argument>-classpath</argument> 
      <classpath /> 
      <argument>com.example.app.MainClass</argument> 
     </arguments> 
    </configuration> 
</plugin> 
... 

Это прекрасно работает для конфигурации по умолчанию приложения, но я хочу, чтобы иметь возможность задать некоторые необязательные параметры в командной строке. В идеале я хотел бы сделать что-то вроде этого:

mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>" 

К сожалению, указав переменную exec.args перезаписываю аргументы я имею в П (которые необходимы для настройки и запуска классов приложения). Есть ли способ обойти это? Каков наилучший способ указать некоторые необязательные аргументы в командной строке, не перезаписывая то, что у меня есть в pom?

ответ

34

Мне удалось найти разумно элегантное решение моей проблемы с использованием переменных среды Maven.

значения по умолчанию определяются как свойства в ПОМ, и добавил с выполняемым плагин в качестве аргументов:

... 
<properties> 
    <argumentA>defaultA</argumentA> 
    <argumentB>defaultB</argumentB> 
</properties> 
... 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-Djava.library.path=${project.build.directory}/lib</argument> 
      <argument>-classpath</argument> 
      <classpath /> 
      <argument>com.example.app.MainClass</argument> 
      <argument>-a</argument> 
      <argument>${argumentA}</argument> 
      <argument>-b</argument> 
      <argument>${argumentB}</argument> 
     </arguments> 
    </configuration> 
</plugin> 
... 

Теперь можно запускать с параметрами по умолчанию точно так, как я делал раньше:

mvn exec:exec 

И я могу легко переопределить значения по умолчанию для каждого аргумента в командной строке, используя:

mvn exec:exec -DargumentA=alternateA -DargumentB=alternateB 
+2

И как ese аргументы могут быть доступны в Java-коде, я имею в виду эту строку: 'String [] args'? – zygimantus

+2

@zygimantus вы хотите 'mvn exec: java -Dexec.mainClass =" path.to.your.class "-Dexec.args =" arg1 arg2 "', который выходит за рамки исходного вопроса. – dr0i

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