如何从根模块运行子模块中找到的应用程序?

问题描述 投票:1回答:1

鉴于以下Maven项目:

  • 根项目 数据库 服务器

我能够在maven-exec-plugin子模块中配置server来运行其中的应用程序。但是,如果有人更新了对等子模块(例如database),那么我就会遇到运行时错误。我想做的是有一些机制可以:

  1. 在构建“当前项目”时构建根项目及其子模块。我不介意这是哪个项目,它可能是root-projectserver
  2. 当我运行“当前项目”时运行server

这样,我可以从单个点启动所有项目范围的操作,而不必在两个项目之间进行上下文切换。

我尝试在maven-exec-plugin配置root-project来做到这一点,但<classpath/>解析为root-project的类路径而不是所需的server类路径。

我想知道是否可以从另一端接近这一点(在maven-compiler-plugin中配置server以构建root-project及其依赖项)但我不知道该怎么做。我也担心这可能引发无休止的循环,因为root-project尝试建立serverserver尝试建立root-project

java maven
1个回答
0
投票

我希望我理解你的问题是正确的,它看起来像我的任何其他项目:

我创建了一个来自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";
}

模块“server”依赖于模块“database”。

<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>

这将运行“server”中的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);
    }
}

你提到“我不介意这是哪个项目,它可能是root-project或server”。因此,为了使上述工作,您需要构建根项目。当你这样做时,root(父)项目stackoverflow-mavenExec使用...

mvn clean install

...它最终将运行com.johanw.stackoverflow.server.Test和输出

Hello The name

如下图所示:

enter image description here

如果只想从根目录中运行服务器主类,请运行follwing命令。

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

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.