springboot 基于 maven 自定义格式打包

本文介绍如何使用Maven配置项目打包流程,包括设置编译版本、定义打包内容及结构等,确保项目能顺利生成用于发布的ZIP文件。
第一步,打开项目所在的工作空间并建立conf文件夹,在该文件下建立package.xml  内容如下:


    <assembly>    
        <id>bin</id>    
        <!-- 最终打包成一个用于发布的zip文件 -->    
        <formats>    
            <format>zip</format>    
        </formats>    
        
        <!-- Adds dependencies to zip package under lib directory -->    
        <dependencySets>    
            <dependencySet>    
                <!--  
                   不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录  
               -->    
                <useProjectArtifact>false</useProjectArtifact>    
                <outputDirectory>lib</outputDirectory>    
                <unpack>false</unpack>    
            </dependencySet>    
        </dependencySets>    
        
        <fileSets>    
            <!-- 把项目相关的说明文件,打包进zip文件的根目录 -->    
            <fileSet>    
                <directory>${project.basedir}</directory>    
                <outputDirectory>/</outputDirectory>    
                <includes>    
                    <include>README*</include>    
                    <include>LICENSE*</include>    
                    <include>NOTICE*</include>    
                </includes>    
            </fileSet>    
                
            <!-- 把项目的配置文件,打包进zip文件的config目录 -->    
            <fileSet>    
                <directory>${project.basedir}/src/main/resources</directory>    
                <outputDirectory>/</outputDirectory>    
                <includes>    
					 <include>**/*</include>
                    <include>*.xml</include>    
                    <include>*.properties</include>
					<include>*.yml</include>					
                    <include>*.key</include>   
                </includes>    
            </fileSet>    
                
            <!-- 把项目的脚本文件目录( src/main/scripts )中的启动脚本文件,打包进zip文件的跟目录 -->    
            <fileSet>    
                <directory>${project.build.scriptSourceDirectory}</directory>    
                <outputDirectory></outputDirectory>    
                <includes>    
                    <include>startup.*</include>    
                </includes>    
            </fileSet>    
        
            <!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->    
            <fileSet>    
                <directory>${project.build.directory}</directory>    
                <outputDirectory></outputDirectory>    
                <includes>    
                    <include>*.jar</include>    
                </includes>    
            </fileSet>    
        </fileSets>    
    </assembly>  

第二步,在pom.xml文件中添加

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
				</configuration>
			</plugin>
			
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<archive>
						<addMavenDescriptor>false</addMavenDescriptor>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<!-- 这里需要指定main方法的所在的类 -->
							<mainClass>server.BasicMicroServiceApplication</mainClass>
						</manifest>
					</archive>
					<excludes>    
						<exclude>${project.basedir}/xml/*</exclude>    
					</excludes> 
				</configuration>
			</plugin>
			<!-- The configuration of maven-assembly-plugin -->    
        <plugin>    
            <groupId>org.apache.maven.plugins</groupId>    
            <artifactId>maven-assembly-plugin</artifactId>    
            <version>2.4</version>    
            <!-- The configuration of the plugin -->    
            <configuration>    
                <!-- Specifies the configuration file of the assembly plugin -->    
                <descriptors>    
                    <descriptor>conf/package.xml</descriptor>    
                </descriptors>    
            </configuration>    
            <executions>    
                <execution>    
                    <id>make-assembly</id>    
                    <phase>package</phase>    
                    <goals>    
                        <goal>single</goal>    
                    </goals>    
                </execution>    
            </executions>    
        </plugin>     
使用mvn clean 清空target  然后使用mvn package
最终生成的目录在target下:如下


在使用 Maven 构建 Spring Boot 项目时,测试代码默认不会被打包进最终的可执行 JAR 文件中。这是因为 Maven 的默认生命周期中,测试代码的作用主要是用于构建过程中的单元测试,而不是作为运行时的一部分。Spring Boot Maven Plugin 在打包时会遵循这一行为,仅将主代码(`src/main/java` 中的内容)编译并打包,而测试代码(位于 `src/test/java`)仅在测试阶段使用,并不会包含在最终的 JAR 包中[^1]。 ### 原因分析 1. **Maven 生命周期限制** Maven 的生命周期中,`test` 阶段在 `package` 阶段之前,其目的是验证代码的正确性,而不是将测试代码作为应用程序的一部分。因此,默认情况下,测试代码不会被包含在最终的打包输出中[^2]。 2. **Spring Boot Maven Plugin 的默认行为** Spring Boot Maven Plugin 的核心功能是打包一个包含所有依赖的可执行 Fat JAR。它默认不会包含测试类,因为测试类在生产环境中通常没有用途,且会增加不必要的体积[^2]。 3. **作用域限制** Maven 的依赖管理中,测试相关的依赖(如 `junit`、`mockito` 等)通常被标记为 `test` 作用域,这些依赖不会被包含在最终的构建输出中。同理,测试代码本身也不会被打包[^3]。 ### 解决方法 如果确实需要将测试代码打包到 JAR 文件中,可以采取以下方法: 1. **修改 `pom.xml` 配置** 可以通过配置 `maven-jar-plugin` 来改变默认的打包行为,使其包含测试类。添加如下插件配置: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>test-jar</id> <goals> <goal>test-jar</goal> </goals> <phase>package</phase> </execution> </executions> </plugin> ``` 这样会生成一个额外的 JAR 文件,包含所有测试类,通常命名为 `*-tests.jar`[^3]。 2. **使用 `spring-boot-maven-plugin` 的 `classifier` 配置** 如果希望将测试类直接打包到 Spring Boot 的可执行 JAR 中,可以通过配置 `spring-boot-maven-plugin` 的 `classifier` 参数来实现: ```xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>exec</classifier> </configuration> </plugin> ``` 这样可以在打包时生成两个 JAR 文件:一个是默认的可执行 JAR,另一个是包含测试类的 JAR[^2]。 3. **自定义构建逻辑** 如果有更复杂的打包需求,例如将测试代码和主代码合并打包,可以考虑使用 `maven-assembly-plugin` 或 `maven-shade-plugin` 来自定义构建逻辑。这些插件允许更灵活地控制打包内容和结构。 ### 注意事项 - **测试代码打包的适用场景** 通常情况下,测试代码不应该被打包到生产环境的可执行文件中。只有在特定场景(如集成测试、调试、代码覆盖率分析等)中才需要将测试类包含在 JAR 文件中。 - **性能与安全性** 包含测试代码的 JAR 文件可能会增加包体积,并可能引入不必要的依赖,影响性能。此外,测试代码可能包含敏感逻辑或测试数据,不适合在生产环境中暴露。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值