素材牛VIP会员
spring boot在多模块下如何打包?
 10***19  分类:Java代码  人气:947  回帖:1  发布于6年前 收藏

最近在学习使用spring-boot

我构建好项目后 pom.xml如下

      ....
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.8.RELEASE</version>
</parent>
    ....

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.xx.Application</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

        </plugins>

当使用了spring-boot的parent后,plugin这样配置,在使用mvn package 后能够自动打包出一个jar,并能用java -jar xx.jar运行。

然后有个新需求,这个时候我这个项目需要归并为另外一个项目的子模块,根据官方文档吧pom.xml改成如下

....
 <parent>
   <groupId>com.xx</groupId>
   <artifactId>platform</artifactId>
   <version>1.0-SNAPSHOT</version>
</parent>
....
<dependency>
   
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-dependencies</artifactId>
   <version>${spring.boot.version}</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>
....
<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.xx.Application</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
</plugins>

就是parent变动了下,其他依赖和插件都没变。此时我使用mvn package打出的jar包只有几百KB,也就是依赖的jar包没有被自动引入。同时,jar包里面也没有orgspringframeworkbootloader这层目录了。


现在该怎么处理才能打出对的jar包?


造化弄人,看到直接可以使用spring-boot-maven-plugin来打包,所以直接修改下spring-boot-maven-plugin的配置,改成如下,运行mvn package OK
写的有点乱 请见谅!

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.xx.Application</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                        
                    </execution>
                </executions>
            </plugin>

感谢:
Maven构建一个多模块的Spring Boot + Spring MVC项目,完全基于java config

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv2 入门
黑***s 页面重构设计 6年前#1

用Gradle吧,天然支持多模块打包。只需一个简单的配置:

a项目的build.gradle文件:

dependencies {
    compile project(':hello')//a项目依赖hello项目
}

这样子配置一下,打包就是一个jar包了。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取