Maven-assemble打包使用案例

港控/mmm° 2022-04-12 11:28 580阅读 0赞

[size=medium]
在开发Maven项目中,我们可能有各种各样的打包需求,当然最简单的就是,把整个Application打包成一个jar,这是Spring-boot项目中,常见的打包项目,有些项目可能比较复杂,还需要打包一些外部的配置的文件,或者自定义的shell脚本或者bat命令等,这时候使用assemble命令就比较方便了。

项目结构目录如下:
[/size]

[img]http://dl2.iteye.com/upload/attachment/0113/2161/1ba1923b-00cd-3f52-9c5b-45a5ad64527f.png\[/img\]

[size=medium]
除了标准的创建maven项目会自带
src/main/java
src/main/resource
src/test/java
外,我们还自定义了bin,conf,assemble目录,其中bin目录用来存放项目启动,停止的一些脚本,conf存放了一些
外部配置文件,外部文件比较灵活,比如参数改了,不需要重新编译,只需要重启这个项目即可,assemble存放了我们打包的描述文件package.xml,内容如下:
[/size]

  1. <?xml version="1.0"?>
  2. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  5. <!--项目标识,设置的话,生成后的zip文件会加上此后缀-->
  6. <id></id>
  7. <!--打包格式-->
  8. <formats>
  9. <format>zip</format>
  10. </formats>
  11. <!--是否包含根目录文件夹-->
  12. <includeBaseDirectory>true</includeBaseDirectory>
  13. <fileSets>
  14. <!--<fileSet>-->
  15. <!--<directory>${project.basedir}\src\main\resources</directory>-->
  16. <!--<outputDirectory>\</outputDirectory>-->
  17. <!--<includes>-->
  18. <!--<include>some/path</include>-->
  19. <!--</includes>-->
  20. <!--<excludes>-->
  21. <!--<exclude>some/path1</exclude>-->
  22. <!--</excludes>-->
  23. <!--</fileSet>-->
  24. <!--自定义文件描述集-->
  25. <fileSet>
  26. <!--自定义脚本目录打包-->
  27. <directory>${project.basedir}\src\main\bin</directory>
  28. <outputDirectory>\bin</outputDirectory>
  29. <includes>
  30. <include>*.*</include>
  31. </includes>
  32. <!--设置权限-->
  33. <fileMode>0755</fileMode>
  34. </fileSet>
  35. <fileSet>
  36. <!--外部配置文件打包-->
  37. <directory>${project.basedir}\src\main\config</directory>
  38. <outputDirectory>\config</outputDirectory>
  39. <includes>
  40. <include>*.*</include>
  41. </includes>
  42. <fileMode>0644</fileMode>
  43. </fileSet>
  44. </fileSets>
  45. <dependencySets>
  46. <dependencySet>
  47. <useProjectArtifact>true</useProjectArtifact>
  48. <outputDirectory>lib</outputDirectory>
  49. <!-- 将scope为runtime的依赖包打包到lib目录下。 -->
  50. <scope>runtime</scope>
  51. </dependencySet>
  52. </dependencySets>
  53. </assembly>

[size=medium]
然后在主pom.xml中,加入如下一段内容:
[/size]

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-assembly-plugin</artifactId>
  6. <configuration>
  7. <!--<appendAssemblyId>true</appendAssemblyId>-->
  8. <descriptors> <!--描述文件路径-->
  9. <descriptor>src/main/assemble/package.xml</descriptor>
  10. </descriptors>
  11. </configuration>
  12. <executions>
  13. <execution>
  14. <id>make-zip</id>
  15. <!-- 绑定到package生命周期阶段上 -->
  16. <phase>package</phase>
  17. <goals>
  18. <!-- 绑定到package生命周期阶段上 -->
  19. <goal>single</goal>
  20. </goals>
  21. </execution>
  22. </executions>
  23. </plugin>
  24. </plugins>
  25. </build>

[size=medium]
至此,我们在执行mvn clean package 时,就会发现target目录下,多了一个zip的压缩包:
[/size]

[img]http://dl2.iteye.com/upload/attachment/0113/2163/844be858-3b20-3bb5-9620-f49fb44abb02.png\[/img\]

[size=medium]
将zip包解压后,如下:
[/size]

[img]http://dl2.iteye.com/upload/attachment/0113/2165/0667fa6f-64dc-3cc5-93a8-488f3b74c389.png\[/img\]

[size=medium]
我们就可以直接将压缩包,传到linux上执行脚本启动了,需要注意的是,在windows下编辑的脚本文件,在linux上可能执行不成功,大家可以下载一个dos2unix的工具,对脚本格式重新修改即可。

参考资料:
[url]http://www.cnblogs.com/JerryWang1991/p/3936378.html\[/url\]
[url]http://skydream.iteye.com/blog/437937\[/url\]
[url]http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html\[/url\]
[/size]
[b][color=green][size=large]
最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
[/size][/color][/b]
[img]http://dl2.iteye.com/upload/attachment/0104/9948/3214000f-5633-3c17-a3d7-83ebda9aebff.jpg\[/img\]

发表评论

表情:
评论列表 (有 0 条评论,580人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用Ant打包Apk

      文章[ Android 使用Ant打渠道包][Android _Ant]讲解了如何使用Ant打渠道包,没有涉及具体的编译过程,例如使用Ant如何生成R文件等。那么今天,使用