Java 无法在多模块项目中正确打包Spring启动应用程序
基本上,我有一个多模块项目,如下所示:Java 无法在多模块项目中正确打包Spring启动应用程序,java,spring,maven,spring-boot,spring-boot-maven-plugin,Java,Spring,Maven,Spring Boot,Spring Boot Maven Plugin,基本上,我有一个多模块项目,如下所示: parent-project ├── core-app └── web-app core-app和web-app都是Spring-Boot项目,它们的父项目是parent项目,而不是Spring-Boot-starter父项目。因此,他们都有: <dependencyManagement> <dependencies> <dependency> &
parent-project
├── core-app
└── web-app
core-app
和web-app
都是Spring-Boot项目,它们的父项目是parent项目
,而不是Spring-Boot-starter父项目
。因此,他们都有:
<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>
这个设置在IntelliJ中运行得非常完美,但是,如果我打包
应用程序,我会得到一个非常小的.jar
,基本上如果我尝试运行它的可执行文件,我会得到几个命令未找到
错误
如果我用java-cp my.jar com.Main运行它,我会得到SpringApplication-notfound
。因此,我了解到核心应用程序
和web应用程序
在jar中没有所有的依赖项
如果我将它构建成一个独立的.jar
,并将spring boot starter父级
作为其父级;它起作用了
我做错了什么?谢谢
更新:
这就是我mvn包时发生的事情。然而,当我实际执行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
正如这里所建议的,这似乎解决了这个问题,但我怀疑这可能不是标准的方法。例如:
mvn-clean-package-spring-boot:repackage
起作用,但是,我不能mvn-clean&&mvn-package&&mvn-spring-boot:repackage
。我希望你能解释一下。谢谢 Maven项目只能有一个父项目,并且您的“模块”不能是模块,除非parent project
是父项目。理论上,您可以使项目父级
扩展启动父级,但这可能会很快变得复杂
相反,只需继续并有选择地使用引导依赖项和包含项。在父项目中使用dependencyManagement
和BOM导入,只拉入每个模块实际需要的依赖项(可能包括fat jar的spring boot starter web
),并仅为独立的far jar模块添加Maven插件:
org.springframework.boot
springbootmaven插件
重新包装
然后您将获得标准尺寸(通常为几K)依赖项JAR和整个处理方法在需要的地方都是明确的。只是一个想法-当您已经将产品作为微服务交付时,有什么必要使用多模块项目?我需要将域对象/POJO分离到一个模块中,以便非技术人员可以在完全不同的应用程序中使用它们。您应该使用java-jar my.jar
运行,而不是java-cp my.jar com.Main
@M.Deinum是的,我知道,这只是为了让jar运行。谢谢在开发“多模块”项目时,我基本上使用org.springframework.boot-spring-boot-starter-parent 1.4.0.RELEASE
到根pom.xml中,并在那里引用模块core-app-web-app
。如果他们有简单的com.root.group yourApp 0.0.1-SNAPSHOT
引用根目录,并且它对meThat很好,这正是我正在做的(我在dependencyManagement
父pom和子模块的pom中尝试了引导依赖项)但仍然会出现错误。@Hasancansal您的代码片段不包括重新打包
目标,这是在最后创建胖罐子的部分。实际上是这样的,但不知怎么的,它没有被发布。但我确信,即使目标存在,也不会调用重新打包目标,请参见上面的更新。谢谢你的帮助,谢谢!
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
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>