Я начал новый проект maven и настроил exec-maven-plugin
для установки по умолчанию mainClass
, и я могу выполнить, используя
mvn exec:java -q
Hello World!
Однако, если я попытаюсь указать другой основной класс в командной строке, это, похоже, будет проигнорировано:
mvn exec:java -Dexec.mainClass = "com.jamesmcguigan.kdt.App2" -q
Hello World!
Приведенная выше строка работает, если я закомментирую раздел exec-maven-plugin
из pom.xml, но было бы неплохо установить значение по умолчанию в pom.xml
для maven exec:java
и иметь возможность переопределить это в cli для mvn exec:java -Dexec.mainClass = "com.jamesmcguigan.kdt.App2"
.
Или я пропустил что-то еще здесь?
пом.xml
<build>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.jamesmcguigan.kdt.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
src/main/java/com/jamesmcguigan/kdt/App.java
package com.jamesmcguigan.kdt;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
src/main/java/com/jamesmcguigan/kdt/App2.java
package com.jamesmcguigan.kdt;
public class App2
{
public static void main( String[] args )
{
System.out.println( "Hello World 2!" );
}
}
Используйте свойство, т.е.:
<properties>
...
<main.class>com.jamesmcguigan.kdt.App</main.class>
</properties>
...
<configuration>
<mainClass>${main.class}</mainClass>
</configuration>
А потом:
mvn exec:java -Dmain.class = "com.jamesmcguigan.kdt.App2" -q
Это ошибка плагина Maven Exec? Свойство -Dexec.mainClass должно работать согласно mojohaus.org/exec-maven-plugin/java-mojo.html. Такое же поведение с 1.6.0 и 3.0.0. Кажется, что конфигурация плагина в pom.xml переопределяет свойства командной строки, чего не должно происходить.
Чтобы переопределить основной класс и аргументы, например:
<project>
...
<properties>
<!-- default values -->
<mainClass>${project.groupId}.${project.artifactId}.App</mainClass>
<mainArgs/>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<mainClass>${mainClass}</mainClass>
<commandlineArgs>${mainArgs}</commandlineArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Чтобы выполнить переопределение:
mvn compile exec:java -DmainClass=org.example.Main -DmainArgs = "arg1 arg2"
Спасибо, это работает. Также можно использовать
<exec.mainClass>
в качестве имени переменной для обратной совместимости. И заметьте себе: не забывайте использоватьmvn compile exec:java
при встрече сClassNotFoundError