出于测试目的,我试图在命令行中使用主类在单个项目中运行由多个Maven模块构建的Java应用程序。我希望能够指定JVM参数,Java系统属性以及主类的命令行参数,但这些都是次要目标。在模块的类路径中执行单独的Java进程
我已经建立了一个简单的项目结构如下:
./module1/pom.xml
./module1/src/main/java/com/example/ClassInModule1.java
./module2/module2.iml
./module2/pom.xml
./module2/src/main/java/com/example/ClassInModule2.java
./pom.xml
module2
通过以下声明取决于module1
在module2/pom.xml
:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>module1</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
我想用com.exmaple.ClassInModule2
类作为主类。要做到这一点,我尝试使用插件exec-maven-plugin
的exec:exec
目标:
mvn -pl module2 -Dexec.executable=java -Dexec.args='com.example.ClassInModule2' exec:exec
但是这会导致以下错误:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module2 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.450s
[INFO] Finished at: Thu Sep 11 13:31:16 CEST 2014
[INFO] Final Memory: 7M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project module2: Could not resolve dependencies for project com.example:module2:jar:1.0.0-SNAPSHOT: Could not find artifact com.example:module1:jar:1.0.0-SNAPSHOT -> [Help 1]
因为module1
被记录在./pom.xml
这是奇怪的。我尝试添加-am
在命令行:
mvn -am -pl module2 -Dexec.executable=java -Dexec.args='com.example.ClassInModule2' exec:exec
但是,这会导致不同的错误:
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] project
[INFO] module1
[INFO] module2
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.3.2:exec (default-cli) @ project ---
Error: Could not find or load main class com.example.ClassInModule2
看来,插件试图在父项目,其中主类运行命令无法找到。
我在做什么错?我如何在多模块项目中使用exec:exec
目标?