java - spring-boot:在没有 mvn install 的 Maven 多模块项目中运行
问题描述
我有一个具有以下结构的 Maven 多模块项目(代码发布在下面):
spring-altroot-reactor
|
+-- spring-altroot-reactor-lib
|
+-- spring-altroot-reactor-web
spring-altroot-reactor-web
是一个 Spring Web 应用程序,依赖于spring-altroot-reactor-lib
. 我的目标是在不将工件安装到本地 M2 存储库的情况下运行 Spring 应用程序。
安装模块后,mvn install
我可以转到spring-altroot-reactor-web
目录并通过mvn spring-boot:run
. 这按预期工作。
但是,当我尝试在spring-altroot-reactor-web
不调用的情况下运行时mvn install
,遇到以下两个错误:
mvn spring-boot:run -pl :spring-altroot-reactor-web -am
在目录中调用spring-altroot-reactor
会产生以下输出:[ERROR] No plugin found for prefix 'spring-boot' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local ($HOME/.m2/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]
启用
spring-boot-maven-plugin
inspring-altroot-reactor
也不起作用:[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.4.5:run (default-cli) on project spring-altroot-reactor: Unable to find a suitable main class, please add a 'mainClass' property -> [Help 1]
Spring 尝试执行父 pom 而不是 web 项目。
mvn spring-boot:run
在目录中执行spring-altroot-reactor-web
找不到依赖spring-altroot-reactor-lib
,因为没有安装:[ERROR] Failed to execute goal on project spring-altroot-reactor-web: Could not resolve dependencies for project com.example.spring:spring-altroot-reactor-web:war:1.0-SNAPSHOT: Could not find artifact com.example.spring:spring-altroot-reactor-lib:jar:1.0-SNAPSHOT in ... (my snapshot repo).
是否有可能在spring-altroot-reactor-lib
不安装到本地 M2 的情况下执行 Spring 插件并找到依赖项?
其他 Maven 插件可以做到这一点,例如我已经使用 Jetty Maven 插件做到了这一点:mvn jetty:run -pl :my-web-project -am
从根 pom 调用成功启动了 Jetty。
一个小脚注:我没有从 Spring Boot 父 pom 继承,而是将其添加为依赖项。我不确定这是否与问题有关。
代码如下。
spring-altroot-reactor/pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.example.spring</groupId>
<artifactId>spring-altroot-reactor</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring.boot.version>2.4.3</spring.boot.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<modules>
<module>spring-altroot-reactor-lib</module>
<module>spring-altroot-reactor-web</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<!--
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
-->
</plugins>
</pluginManagement>
</build>
<modelVersion>4.0.0</modelVersion>
</project>
spring-altroot-reactor/spring-altroot-reactor-lib/pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.example.spring</groupId>
<artifactId>spring-altroot-reactor</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>spring-altroot-reactor-lib</artifactId>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
</project>
spring-altroot-reactor/spring-altroot-reactor-web/pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.example.spring</groupId>
<artifactId>spring-altroot-reactor</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>spring-altroot-reactor-web</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>spring-altroot-reactor-lib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<systemPropertyVariables>
<property1>test</property1>
<property2>${my.value}</property2>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
<modelVersion>4.0.0</modelVersion>
</project>
编辑:由于bekce下面的评论找到了解决方案。 此问题与Run mvn spring-boot:run from parent module 重复? 那里提出的解决方案对我有用。
解决方案
推荐阅读
- java - match() 方法的模式匹配无法正常工作
- python - ValueError:由 4 减去 5 导致的负尺寸大小
- ffmpeg - ffmpeg strftime 对 Windows 没有影响
- node.js - Firebase 的云函数 - getaddrinfo EAI_GAIN site.com:443
- php - 在php中的几个间隔之间生成一个随机数
- wordpress - wordpress 不断重定向到已删除的页面
- sql-server - 通过链接到 SQL 服务器数据库的 MS Access 以多对多关系(中间表)插入数据
- azure-active-directory - 我是否可以在用户通过 Azure AD SSO 进行身份验证的外部网站/应用程序的 iFrame 中使用 Sharepoint 视图
- amazon-web-services - Athena 上的 ALTER TABLE ADD PARTITION 有任何限制吗?
- angular - 我已经安装了 npm install fontawesome-free,仍然给我这个错误