80.10 使用Ant构建可执行存档(不使用spring-boot-antlib)
想要使用Ant进行构建,你需要抓取依赖,编译,然后像通常那样创建一个jar或war存档。为了让它可以执行,你可以使用spring-boot-antlib
,也可以使用以下指令:
- 如果构建jar,你需要将应用的类和资源打包进内嵌的
BOOT-INF/classes
目录。如果构建war,你需要将应用的类打包进内嵌的WEB-INF/classes
目录。 - 对于jar,添加运行时依赖到内嵌的
BOOT-INF/lib
目录。对于war,则添加到WEB-INF/lib
目录。注意不能压缩存档中的实体。 - 对于jar,添加
provided
依赖到内嵌的BOOT-INF/lib
目录。对于war,则添加到WEB-INF/lib-provided
目录。注意不能压缩存档中的实体。 - 在存档的根目录添加
spring-boot-loader
类(这样Main-Class
就可用了)。 - 使用恰当的启动器,比如对于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