【问题标题】:Multi-module Spring Boot and start-class多模块 Spring Boot 和启动类
【发布时间】:2015-06-20 23:41:45
【问题描述】:

我已将我的应用程序设为多模块,并计划最终将它们拆分为多个存储库。

我在弄清楚如何使 mvn spring-boot:run 与我的布局配合使用时遇到问题(这可能是问题所在)。

其实目录结构是

 xenoterracide/
     rpf/
     rpf-application/

当我从 xenoterracide 运行 mvn test 时,一切正常,当我启动 Application 课程时,一切正常。

如果我 cd 进入 rpf-application 并运行 mvn compile 它告诉我它找不到依赖项,我猜这是因为事情应该从存储库根目录运行。

[INFO] ------------------------------------------------------------------------
[INFO] Building rpf-application 0.1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.xenoterracide:security-rbac-jpa:jar:0.1.0-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for com.xenoterracide:http:jar:0.1.0-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for com.xenoterracide:rpf-domain:jar:0.1.0-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for com.xenoterracide:rpf-liquibase:jar:0.1.0-SNAPSHOT is missing, no dependency information available

如果我尝试在xenoterracide/pom.xml 中设置start-class,它会告诉我它找不到类(因为它当然在 rpf-application 中)。

rpf-application/pom.xml

<parent>
    <artifactId>rpf</artifactId>
    <groupId>com.xenoterracide</groupId>
    <version>0.1.0-SNAPSHOT</version>
    <relativePath>../rpf/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>rpf-application</artifactId>

<properties>
    <start-class>com.xenoterracide.RpfApplication</start-class>
</properties>

<dependencies>
    <!-- internal -->
    <dependency>
        <groupId>com.xenoterracide</groupId>
        <artifactId>security-rbac-jpa</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.xenoterracide</groupId>
        <artifactId>http</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.xenoterracide</groupId>
        <artifactId>rpf-domain</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.xenoterracide</groupId>
        <artifactId>rpf-liquibase</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </dependency>
...

rpf/pom.xml

<parent>
    <artifactId>xenoterracide</artifactId>
    <groupId>com.xenoterracide</groupId>
    <version>0.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>rpf</artifactId>
<packaging>pom</packaging>
<modules>
    <module>../rpf-domain</module>
    <module>../rpf-application</module>
    <module>../rpf-liquibase</module>
</modules>

pom.xml

<modelVersion>4.0.0</modelVersion>

<groupId>com.xenoterracide</groupId>
<artifactId>xenoterracide</artifactId>
<packaging>pom</packaging>
<version>0.1.0-SNAPSHOT</version>
<modules>
    <module>util</module>
    <module>http</module>
    <module>security-rbac-api</module>
    <module>security-rbac-jpa</module>
    <module>hibernate</module>
    <module>entity-jpa</module>
    <module>rpf</module>
    <module>test-repositories</module>
    <module>entity-api</module>
</modules>
<properties>
    <!-- use UTF-8 for everything -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<parent>
    <groupId>io.spring.platform</groupId>
    <artifactId>platform-bom</artifactId>
    <version>1.1.2.RELEASE</version>
 </parent>

如何使 mvn spring-boot:run 从存储库的根目录 (xenoterracide) 或 rpf-application 工作?

【问题讨论】:

    标签: java spring maven spring-boot


    【解决方案1】:

    我还有一个多项目 Spring Boot 应用程序,您不能从父级执行它,因为可能有多个模块并且它不知道要运行哪个。如果您首先将项目的其余部分安装到本地 Maven 存储库,则可以从子模块执行此操作。所以从你的异种杀戮开始:

    mvn install
    

    假设它可以将您的 SNAPSHOT 版本放入您的本地存储库。然后您可以更改为您的 rpf-application 并运行:

    mvn spring-boot:run
    

    我从来没有真正使用过这种方式来运行它,所以也许您可以解释一下您的需求是什么,我们可以看看是否有其他更好的方式。我确实在我的项目中做到了,它可以工作,但是您必须注意工作目录在您的环境特定配置文件的位置。

    【讨论】:

    • 我有一个朋友,我曾经/正在尝试向他推销迁移到 java/spring io 作为开发堆栈,我告诉他运行它的简单方法(没有 IDE,他是盲人)它没有用,我不知道其他方法,因为目前我要么运行测试套件,要么直接启动应用程序类(我的应用程序还没有达到我希望部署的状态)。我当然鼓励他研究更简单的应用程序。我认为对他来说,一个非常面向终端的工作流程将是最好的。执行安装然后运行不会有问题,这适用于新的开发工具吗?
    • 我认为这不是问题。我将 IntelliJ 用于我的项目。您也可以设置自己的脚本。希望这个答案是您想要的。
    • 是否可以在每次更改子模块时不必运行 mvn install 进行此设置?也许是一个 Eclipse 插件?
    • 我对 Eclipse 不太熟悉,但有可能。如果您正在寻找更改,您可以使用 Spring Boot 开发工具在 IDE 中重新加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2015-07-30
    • 2017-05-17
    • 1970-01-01
    • 2018-11-01
    • 2020-04-06
    • 2019-04-15
    相关资源
    最近更新 更多