80.10 使用Ant构建可执行存档(不使用spring-boot-antlib)

想要使用Ant进行构建,你需要抓取依赖,编译,然后像通常那样创建一个jar或war存档。为了让它可以执行,你可以使用spring-boot-antlib,也可以使用以下指令:

  1. 如果构建jar,你需要将应用的类和资源打包进内嵌的BOOT-INF/classes目录。如果构建war,你需要将应用的类打包进内嵌的WEB-INF/classes目录。
  2. 对于jar,添加运行时依赖到内嵌的BOOT-INF/lib目录。对于war,则添加到WEB-INF/lib目录。注意不能压缩存档中的实体。
  3. 对于jar,添加provided依赖到内嵌的BOOT-INF/lib目录。对于war,则添加到WEB-INF/lib-provided目录。注意不能压缩存档中的实体。
  4. 在存档的根目录添加spring-boot-loader类(这样Main-Class就可用了)。
  5. 使用恰当的启动器,比如对于jar使用JarLauncher作为manifest的Main-Class属性,指定manifest的其他属性,特别是Start-Class

示例:

  1. <target name="build" depends="compile">
  2. <jar destfile="target/${ant.project.name}-${spring-boot.version}.jar" compress="false">
  3. <mappedresources>
  4. <fileset dir="target/classes" />
  5. <globmapper from="*" to="BOOT-INF/classes/*"/>
  6. </mappedresources>
  7. <mappedresources>
  8. <fileset dir="src/main/resources" erroronmissingdir="false"/>
  9. <globmapper from="*" to="BOOT-INF/classes/*"/>
  10. </mappedresources>
  11. <mappedresources>
  12. <fileset dir="${lib.dir}/runtime" />
  13. <globmapper from="*" to="BOOT-INF/lib/*"/>
  14. </mappedresources>
  15. <zipfileset src="${lib.dir}/loader/spring-boot-loader-jar-${spring-boot.version}.jar" />
  16. <manifest>
  17. <attribute name="Main-Class" value="org.springframework.boot.loader.JarLauncher" />
  18. <attribute name="Start-Class" value="${start-class}" />
  19. </manifest>
  20. </jar>
  21. </target>

Ant示例中有一个build.xml文件及manual任务,可以使用以下命令来运行:

  1. $ ant -lib <folder containing ivy-2.2.jar> clean manual

在上述操作之后,你可以使用以下命令运行该应用:

  1. $ java -jar target/*.jar