2017-06-14 61 views
0

基本上,我有一个多模块项目如下:不能在一个多模块项目妥善包装春天启动应用程序

parent-project 
├── core-app 
└── web-app 

core-appweb-app都是春天启动的项目,他们的父母是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-appweb-app没有jar中的所有依赖关系。

如果我将它构建为以spring-boot-starter-parent作为其父项的独立.jar;有用。

我在做什么错?谢谢。

更新:

现在这是发生了什么事,当我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

只是一个想法 - 当您已经将产品作为微服务运输时,需要多模块项目吗? –

+0

我需要将域对象/ POJO分离到一个模块中,以便非技术人员在完全不同的应用程序中使用它们。 –

+1

您应该使用'java -jar my.jar'而不是'java -cp my.jar com.Main'运行。 –

回答

1

Maven项目只能有一个父项,而您的“模块”不能是模块,除非parent-project是父项。您理论上可以让project-parent扩展Boot父项,但这可能会很匆忙地变得复杂。

相反,只需继续并选择性地使用引导依赖关系和包含。使用dependencyManagement和BOM导入在parent-project,拉实际上只需要为每个模块(可能包括spring-boot-starter-web为你的脂肪JAR)的依赖,并添加Maven插件为独立远罐子模块仅

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

然后你会得到标准大小(通常是几K)的依赖瓶和整个处理,特别是在需要的地方。

+0

这实际上正是我所做的(我已经在'dependencyManagement'父pom和子模块'pom中尝试了Boot的依赖关系),并且仍然出现错误。 –

+0

@HananCanSaral你的代码片段不包含“重新包装”目标,这是在最后创建脂肪罐的部分。 – chrylis

+0

它实际上,它不知道发布。但我相信,即使有“目标”,重新打包目标也不会被调用,请参阅上述更新。感谢您的帮助,谢谢! –

相关问题