使用Maven作为构建系统,已经用Java编写了命令行程序,从那里到将程序作为命令使用的推荐方法是什么?
假设该程序称为Foo。在foo
目录中,我可以运行mvn package
来生成target/foo-1.0-SNAPSHOT.jar
,它可以依次与java -cp target/foo-1.0-SNAPSHOT.jar foo.Main %*
运行,但是该命令太长,无法期望用户键入。我需要在命令行上输入foo
才能运行程序。 mvn install
不;它将jar复制到本地Maven存储库中。
将程序作为命令使用的推荐方法是什么?
答案 0 :(得分:3)
您可以像这样使用Maven Assembler Plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
<programs>
<program>
<mainClass>sandbox.Main</mainClass>
<id>app</id>
</program>
</programs>
</configuration>
</plugin>
运行mvn package
将在${project.build.directory}/appassembler
子文件夹的bin文件夹中生成Windows(.bat)和Unix shell脚本。
答案 1 :(得分:0)
我最终只写了一个简单的Python脚本:https://github.com/russellw/ayane/blob/master/build.py
#!/usr/bin/python3
import subprocess
import os
subprocess.check_call("mvn package", shell=True)
if os.name == "nt":
with open("ayane.bat", "w") as f:
f.write("java -ea -jar %s\\target\\ayane-3.0-SNAPSHOT.jar %%*\n" % os.getcwd())
else:
with open("ayane", "w") as f:
f.write("#!/bin/sh\n")
f.write('java -ea -jar %s/target/ayane-3.0-SNAPSHOT.jar "$@"\n' % os.getcwd())
st = os.stat("ayane")
os.chmod("ayane", st.st_mode | 0o111)