Подтвердить что ты не робот

Передача командной строки Парамс в mvn exec: exec

Я поражен, что то, что должно было быть очень легкой работой, превращается в очень раздражающую задачу для меня. Все, что мне нужно, это передать несколько параметров командной строки в мой плагин maven exec: exec. к сожалению, часы поиска в Google не помогли вообще.

Вот мой плагин

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-classpath</argument>
            <classpath />
            <argument>-javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar</argument>
            <argument>-Xmx256m</argument>
            <argument>com.myPackage.Myclass</argument>
        </arguments>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Теперь из командной строки я набираю:

mvn exec:exec -Dexec.args=-Dmy.property=myProperty

Я также попробовал:

mvn exec:exec -Dexec.arguments=-Dmy.property=myProperty

И многое другое. Однако, похоже, ничего не работает. Я знаю, что exec: exec работает в отдельной виртуальной машине, но согласно документации -Dexec.args должен работать для меня. Может кто-нибудь подсказать, пожалуйста, где я иду не так?

4b9b3361

Ответ 1

Мне удалось заставить аргументы JVM работать для exec: exec, используя следующее после прочтения этой статьи:

    <build>
      <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-Dhttp.proxyHost=myproxy.example.com</argument>
                    <argument>-Dhttp.proxyPort=8080</argument>
                    <argument>-classpath</argument>
                    <classpath />
                    <argument>com.example.Main</argument>
                </arguments>
            </configuration>
        </plugin>
      </plugins>
    </build>

Ответ 2

Два способа передать аргументы командной строки в mvn: exec:

Способ 1, в командной строке:

mvn exec:java -Dexec.mainClass="com.myPackage.myClass" -Dexec.args="command line arguments"

Способ 2, в файле POM maven:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <configuration>
        <mainClass>com.myPackage.myClass</mainClass>
        <commandlineArgs>command line arguments</commandlineArgs>
      </configuration>
    </plugin>
  </plugins>
</build>

Затем в командной строке все, что вам нужно сделать, выполняется:

mvn exec:java

Удачи.

Ответ 3

почему бы не использовать системное свойство?

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.3.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>bobo.Abc</mainClass>
                  <arguments>
                        <argument>argument1</argument>
                    </arguments>
                    <systemProperties>
                        <systemProperty>
                            <key>jvmProperty1</key>
                            <value>dev</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </plugin>

Ответ 4

Если вы хотите передать аргументы командной строки в Java VM, используйте <commandlineArgs> вместо <arguments>. Плагин Maven Exec

Приветствия

Ответ 5

Я использую следующий параметр командной строки, чтобы передать аргументы моему Main-Class с плагином exceution.

mvn clean install -Dexec.arguments="arg0"

Ответ 6

Проблема в том, что вы используете -Dexec.args в командной строке, и он переопределяет <arguments> приведенный в pom.xml. Вы можете использовать любой из них, а не оба.

Ответ 7

Я не думаю, что выбранный ответ решает проблему. Вот мое несколько хакерское решение, которое работает:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-classpath</argument>
            <classpath />
            <argument>-Xmx256m</argument>
            <argument>com.myPackage.Myclass</argument>
            <argument>${myProperty1}</argument> <!-- variable args here!!! -->
            <argument>${myProperty2}</argument>

        </arguments>
    </configuration>
    <executions>
        <execution>
            <id>myExecution</id> <!-- defined an id here! -->
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Теперь вы можете просто выполнить передачу аргументов.

mvn exec:[email protected] -DmyProperty1=XXX -DmyProperty2=YYY