3

我正在开发一个 .jar 文件库来实现一堆帮助类来将 PC 连接到一个外部硬件。我还将添加一些简单的应用程序(命令行或 GUI)来使用该库处理常见任务。

我的问题是,是否有推荐的方法以某种特定方式简化 JVM 的命令行实例化?

例如,而不是要求用户键入一个神秘的容易出错的命令,例如:

java -cp TurboBlenderLib.jar -jar TurboBlenderApp.jar -DFoo=Bar arg1 arg2

相反,我做

TurboBlenderApp arg1 arg2

?

我想我可以使用 shell 脚本(包括 win32 批处理文件... gackckkk),只是我不擅长这些 + 我想知道是否有一种更直接的独立于平台的方式来运行 Java 应用程序命令行。

4

8 回答 8

5
  1. 当您使用-jar, then -cp(和CLASSPATH变量)将被忽略
  2. 只需提供一个可执行的jar。" java -jar TheApp <whateverargumentsyouwant>" 不应该太难(但是,您可以在文件清单中包含Class-Path 属性)。jar
  3. 如果太难写一个 GUI
  4. 或提供那些 shell 脚本/批处理文件。写这些也不是太难。
于 2008-12-22T21:00:11.040 回答
2

如果您只想简化本地执行,请使用批处理文件,甚至只是创建自定义快捷方式。如果要创建启动器并打包可执行 jar 和部署所需的库,请使用Launch4j 之类的东西。

于 2008-12-22T21:34:34.903 回答
1

如果您用于启动应用程序,则可以通过向主 jar 的清单java -jar添加一个条目来向类路径添加其他 jar 。Class-Path有关更多信息,请参阅jar 文件规范

于 2008-12-22T22:24:18.657 回答
1

Shell 脚本和批处理文件是完成您想要的工作的标准方式。(查看任何主要的 Java 产品。)

当然,这绝对是可悲和可笑的。去Java。

您的替代方法是编写一个小 C 程序来执行您需要的操作(创建 java 进程)并为您支持的每个平台编译它。(C 是真正的平台独立语言)。

无论哪种方式,您都需要采取与平台相关的步骤,以使您的应用程序在操作系统中真正感到宾至如归。在 OS X 上,您需要制作一个 .app 包,在 Windows 上,您需要将至少图标和版本信息打包到一个 EXE 中。对于 Linux,shell 脚本就足够了。:-)

于 2008-12-22T21:00:12.833 回答
1

出于某种原因,这个技巧无法解决。您需要做的是为定义Main-class:属性的 jar 文件创建自定义清单,并在 jar 文件中包含您正在使用的所有类文件。然后你只需要运行

$ java -jar myapp.jar

在真正的操作系统上,您甚至可以只运行 jar 文件,因为它们将使用幻数来启动它。但是,如果必须,只需要包含该行的单行批处理或 shell 脚本即可。

这在Java 教程之一中进行了描述。

于 2008-12-22T21:37:49.140 回答
1

与往常一样,在 Jakarta Commons 中可以找到另一个解决方案:commons-launcher

于 2008-12-23T10:20:27.367 回答
0

批处理文件可以完成这项工作。将您要执行的确切命令放入文件 myProg.bat 并运行它。

于 2008-12-22T20:58:14.210 回答
0

这很容易:

在 TurboBlenderApp.cmd 中写入:

java -cp TurboBlenderLib.jar -jar TurboBlenderApp.jar -DFoo=Bar %1 %2

// 请记住关于 -cp 和 -jar 的 saua 回答

然后从命令行中编写:

TurboBlenderApp arg1 arg2

正是你想要的方式。

如果在 Unix/Linux 中将 th4e %1 %2 替换为 $1 $2 并确保您的应用程序具有执行权限(如果您不知道如何执行此操作,我想您也不需要它)

于 2008-12-22T21:17:53.780 回答