Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在多模块项目中正确打包Spring启动应用程序_Java_Spring_Maven_Spring Boot_Spring Boot Maven Plugin - Fatal编程技术网

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>