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

我在弄清楚如何使mvn spring-boot:run与我的布局一起工作时遇到问题(可能是问题所在)。

实际上目录结构是

 xenoterracide/
     rpf/
     rpf-application/


当我从mvn test运行xenoterracide时,一切正常,而当我启动Application类时,效果很好。

如果我进入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


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

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>


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

最佳答案

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

mvn install


假设可行,它将把您的SNAPSHOT版本放入本地存储库。然后,您可以更改为rpf应用程序,然后运行:

mvn spring-boot:run


我从未真正使用过这种方法来运行它,因此也许您可以解释您的需求,然后我们看看是否还有另一种可能更好的方法。我确实在我的项目中做到了这一点,并且可以正常工作,但是您必须意识到工作目录在您的环境特定配置文件中所处的位置。

09-28 09:51