Maven和安装命令行程序

时间:2018-11-28 14:05:16

标签: java maven

使用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存储库中。

将程序作为命令使用的推荐方法是什么?

2 个答案:

答案 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)
相关问题