基于Maven编写命令行应用:最佳实践
java命令行应用 = 一些*.jar文件 + *.sh/*.bat可执行脚本
如果你的应用是基于maven的, 可以参考以下实践,避免走弯路。
以下所有资料从网上汇集而来
使用assembly插件将jar和可执行脚本打包成 *.zip
<!--pom.xml--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.3</version><configuration><descriptors><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><!--src/main/assembly/assembly.xml --><!--jar文件将打在zipFile/jars目录下 --><!--脚本文件可以src/main/bin下,打包后在zipFile/bin目录下--><assembly><id>jarset</id><formats><format>zip</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><fileSet><directory>src/main/bin</directory><outputDirectory>/bin</outputDirectory><fileMode>755</fileMode></fileSet></fileSets><dependencySets><dependencySet><outputDirectory>/jars</outputDirectory><scope>runtime</scope></dependencySet></dependencySets></assembly>
编写*nix下的shell文件
#这里的关键是要把jars/*.jar加入classpath,可以这样写#!/bin/shjava -cp $(echo ../jars/*.jar | tr ' ' ':') somepackage.SomeClass %*
编写windows下的*.bat文件
@echo offfor %%j in (..\jars\*.jar) do call :add_jar %%jjava -cp %CLASSPATH%;%JARS% com.taobao.loo.dev.tools.lmt.dcc.FindFullDepPathOfDups %*exit /b:add_jarset JARS=%JARS%;%1exit /b
(可选)使用timestamp作为程序的版本号
频繁变更、不太严谨的命令行应用可以使用timestamp作为程序的版本号
<!--pom.xml--><groupId>some.group</groupId><artifactId>some.artifact</artifactId><version>${maven.build.timestamp}</version><properties><maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format></properties>