基本上,我有一个多模块项目如下:
parent-project
├── core-app
└── web-app
core-app
和web-app
都是Spring Boot项目,其父级是parent-project
而不是spring-boot-starter-parent
。因此,他们都有:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<type>pom</type>
<version>${spring.boot.version}</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在他们的pom.xml
中,以及:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
这个设置完全在IntelliJ中运行,但是,如果我package
应用程序,我会得到一个非常小的.jar
,基本上如果我尝试运行它可执行文件,我会得到几个command not found
错误。
如果我使用java -cp my.jar com.Main
运行它,我会SpringApplication not found
。因此,据我所知,core-app
和web-app
并没有jar中的所有依赖项。
如果我将其构建为独立的.jar
,并将spring-boot-starter-parent
作为其父级;它有效。
我做错了什么?感谢。
更新
现在这就是我mvn package
时发生的事情。但是,当我实际执行mvn spring-boot:repackage
时,我得到了:
Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Source must refer to an existing file
正如这里所建议的this似乎解决了这个问题,但我怀疑它可能不是标准方式。例如:
mvn clean package spring-boot:repackage
可以解决问题,但我不能mvn clean && mvn package && mvn spring-boot:repackage
。我很感激对此的解释。谢谢!
答案 0 :(得分:1)
Maven项目只能有一个父母和你的&#34;模块&#34;除非parent-project
是父母,否则不能成为模块。理论上你可以使project-parent
扩展Boot父级,但这可能会很复杂。
相反,只需继续选择性地使用Boot依赖项和包含。使用dependencyManagement
中的parent-project
和BOM导入,仅提取每个模块实际需要的依赖项(可能包括胖jar的spring-boot-starter-web
),并添加Maven插件 for仅限独立的远程jar模块:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
然后,您将获得标准尺寸(通常为几K)的依赖性罐子以及特定需要的整个处理。