欢迎光临
我们一直在努力

maven打包springboot项目的插件配置概览

使用springboot提供的maven打包插件spring-boot-maven-plugin即可,方便快捷,pom文件的配置如下:

项目文件和依赖的jar包分离,因为引用的jar变动较少,项目发布时只需替换项目jar包或class即可,使用常规maven打包插件, maven-jar-plugin, maven-dependency-plugin,输出为可执行的jar和lib包,pom文件的配置如下:

<!-- 测试本地jar包引入和打包 --> <!-- 项目管理的角度,尽量不使用本地jar包,搭建maven私服可以统一更新管理自研jar包 --> <dependency> <groupId>cn.henry.test</groupId> <artifactId>local_test</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/local_lib/local_test.jar</systemPath> </dependency> <build> <!-- 配置文件,依赖jar和可执行jar分离的包,便于文件替换发布 --> <plugins> <!-- 复制依赖的jar包到指定的文件夹里,相当于:mvn dependency:copy-dependencies -DoutputDirectory=lib --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 配置依赖和启动类--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <!-- MANIFEST.MF 中 Class-Path 加入前缀 --> <classpathPrefix>lib/</classpathPrefix> <!--指定入口类 --> <mainClass>cn.henry.study.FileMessageServer</mainClass> </manifest> <manifestEntries> <!-- 在Class-Path下添加配置文件的路径,本地jar的引入方式: dependency中的artifactid-version.jar --> <Class-Path>lib/local_test-1.0.0.jar</Class-Path> <!--这里表示jar路径加入到MANIFEST.MF--> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build>

解决项目jar中依赖与引用方jar包版本冲突的问题,提高jar包的易用性和独立性,缺点是打出来的包较大,jar包内置依赖不透明。 使用maven打包插件maven-shade-plugin,pom文件的配置如下:

在cmd中切换到local_test.jar包所在的目录,执行 mvn install:install-file "-DgroupId=cn.henry.frame" "-DartifactId=local_test" "-Dversion=1.0.0" "-Dpackaging=jar" "-Dfile=local_test.jar" 其中: -DgroupId 为maven依赖的groupId -DartifactId 为maven依赖的artifactId -Dversion 为maven依赖的version -Dfile 为local_test.jar包的文件名 引入安装后的local_test.jar包,maven依赖如下: <!-- 项目管理的角度,尽量不使用本地jar包,搭建maven私服可以统一更新管理自研jar包 --> <dependency> <groupId>cn.henry.frame</groupId> <artifactId>local_test</artifactId> <version>1.0.0</version> </dependency> <build> <plugins> <!-- 提供给第三方使用的,包含所有依赖的普通jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 加入启动类 --> <!--<transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>xxx.xxx</mainClass> </transformer> </transformers>--> <createDependencyReducedPom>false</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build>

通用模式,如果项目中有使用到第三方依赖,需要提供说明,否则会直接报class not found exception。 使用maven打包插件maven-jar-plugin,pom文件的配置如下:

用maven查看jar依赖:mvn dependency:tree

插件打包的原理:读取xml配置,组装成规范的jar文件

重点关注的部分: JAR文件格式中META-INF目录下的MANIFEST.MF文件,用于定义扩展和包相关的数据。主属性: Manifest-Version(MF文件版本号), Main-Class(包含main方法的类), Class-Path(执行这个jar包时的ClassPath,第三方依赖)

打包的一般做法是扫描项目所依赖的包,按照规范拼接Class-Path的value值,写入MF文件。但这种做法不够灵活,框架通常会从MF文件获取自定义信息,使用classloader动态加载依赖的jar包,并控制文件的合并,过滤等规则。

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《maven打包springboot项目的插件配置概览》
文章链接:https://www.456zj.com/39047.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址