86.9 使用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属性。

示例:

<target name="build" depends="compile">
<jar destfile="target/${ant.project.name}-${spring-boot.version}.jar" compress="false">
<mappedresources>
<fileset dir="target/classes" />
<globmapper from="*" to="BOOT-INF/classes/*"/>
</mappedresources>
<mappedresources>
<fileset dir="src/main/resources" erroronmissingdir="false"/>
<globmapper from="*" to="BOOT-INF/classes/*"/>
</mappedresources>
<mappedresources>
<fileset dir="${lib.dir}/runtime" />
<globmapper from="*" to="BOOT-INF/lib/*"/>
</mappedresources>
<zipfileset src="${lib.dir}/loader/spring-boot-loader-jar-${spring-boot.version}.jar" />
<manifest>
<attribute name="Main-Class" value="org.springframework.boot.loader.JarLauncher" />
<attribute name="Start-Class" value="${start-class}" />
</manifest>
</jar>
</target>

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

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

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

$ java -jar target/*.jar