spring boot在多模块下如何打包?

最近在学习使用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

阅读 20.8k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏