如何在Java中创建命令行应用程序?

时间:2014-01-28 06:49:53

标签: java deployment command-line go

我正在编写一个命令行工具,该工具应适用于所有流行的平台(Windows,Mac和Linux)。我正在考虑在golang中编写它,因为它可以生成静态编译的二进制文件,并且可以在上述所有平台上运行。在我做出决定之前,我需要评估Java,看看它是否可以做到这一点。

我想知道是否可以用Java创建一流的命令行程序? AFAIK,Java程序需要像

一样启动
java -cp classpath MyApp

现在我需要将它包装在shell脚本中以改善体验。像,

#!/bin/sh
java -cp classpath MyApp $@

现在用户可以这样做:

myapp --arg1 value --arg2 value

问题是这种方法不是跨平台的。在Windows上,我需要编写一个批处理文件来执行此操作。

我不确定这是否是在Java中正确的方法。有没有更好的方法来处理这个问题?

3 个答案:

答案 0 :(得分:2)

您发布的解决方案(调用特定于平台的脚本文件)确实是最简单,最快速的实现方式。如果这不足以满足您的需求,那么有几种解决方案可以提供更好的可用性:

  1. executable jar files。基本上通过在MANIFEST.MF条目中声明您的主类,通过双击某些平台(肯定是窗口,其余的我不确定),该文件变为可执行文件。请注意,这需要在计算机上正确安装JRE。
  2. 服务包装器。有第三方产品将您的Java应用程序包装在本机可执行文件中,并允许您的应用程序“感觉”像本机应用程序。最常用的是tanuki service wrapper,但还有其他(launch4j是一个适合您所需操作系统的开源替代方案)。
  3. 编辑 - 相关SO问题中的更多选项here

答案 1 :(得分:1)

要轻松使用命令行参数,您可以使用Apache CLI。如果缺少某些参数,它会解析参数并打印它们的列表。在java项目中,在bin文件夹中同时包含*.bat*.sh文件总是可以的。你对这种方法有什么困惑?例如,看看Ant或Maven项目。

答案 2 :(得分:0)

我可能会建议使用Maven,它有一个名为“maven spring shell”的概念很容易开发。你确实需要为windows和linux编写.bat和.sh,但它更像是一种配置类型。包装会更容易。 以下链接可以帮助您 developing spring shell applications