给定以下 Maven 项目:
- 根项目
- 数据库
- 服务器
我能够配置maven-exec-plugin
里面server
子模块来运行其中找到的应用程序。但是,如果有人更新对等子模块(例如 database
),那么我会收到运行时错误。我想做的是有一些机制可以:
- 在构建“当前项目”时构建根项目及其子模块。我不介意这是哪个项目,它可能是
root-project
或server
. - 运行
server
当我运行“当前项目”时
这样,我就可以从一个点启动所有项目范围的操作,而不必在两个项目之间进行上下文切换。
我尝试配置maven-exec-plugin
在root-project
这样做,但是<classpath/>
解析为 root-project
的类路径而不是所需的 server
类路径。
我想知道是否可以从另一端接近这个(在 maven-compiler-plugin
中配置 server
来构建 root-project
及其依赖项),但我不确定如何做到这一点。我还担心这可能会引发无限循环,如 root-project
尝试构建server
和server
尝试构建root-project
.
最佳答案
我希望我正确理解了你的问题,对我来说它看起来就像任何其他项目:
我已经创建了一个可从 https://github.com/johanwitters/stackoverflow-mavenExec 获取的项目
- 父级:stackoverflow-mavenExec
- 子模块 1:数据库
- 子模块 2:服务器
模块“database”有 1 个类 com.johanw.stackoverflow.database.Database 定义为:
package com.johanw.stackoverflow.database;
public class Database {
public static String DATBASE_NAME = "The name";
}
模块“服务器”依赖于模块“数据库”。
<dependency>
<groupId>com.johanw.stackoverflow.mavenExec</groupId>
<artifactId>database</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
模块“server”有一个 exec-maven-plugin 插件,定义为:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.johanw.stackoverflow.server.Test</mainClass>
</configuration>
</plugin>
这将运行“服务器”中可用的 com.johanw.stackoverflow.server.Test 类,其定义为:
package com.johanw.stackoverflow.server;
import com.johanw.stackoverflow.database.Database;
public class Test {
public static void main(String[]args) {
System.out.println("Hello " + Database.DATBASE_NAME);
}
}
您提到“我不介意这是哪个项目,它可能是根项目或服务器”。因此,为了使上述工作正常进行,您需要构建根项目。当您这样做时,根(父)项目 stackoverflow-mavenExec 使用...
mvn clean install
...它最终将运行 com.johanw.stackoverflow.server.Test 并输出
Hello The name
如下图所示:
如果您只想运行服务器主类,请从根目录运行以下命令。
mvn exec:java -pl server -Dexec.mainClass=com.johanw.stackoverflow.server.Test
如果您的目标是在全新安装和运行服务器之间切换,那么您可以删除服务器 pom 中 exec-maven-plugin 的定义,然后分别运行:
mvn clean install
和
mvn exec:java -pl server -Dexec.mainClass=com.johanw.stackoverflow.server.Test
我希望这会有所帮助。
关于java - 如何从根模块运行子模块中找到的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48048608/