我正在开发.jar文件库,以实现一堆辅助类,将PC连接到一块外部硬件。我还将添加一些简单的应用程序,无论是命令行还是GUI,都可以使用库来处理常见任务。
我的问题是,是否有推荐的方法以某种特定的方式简化JVM的命令行实例化?
e.g。而不是要求用户输入隐藏的容易出错的命令,如:
java -cp TurboBlenderLib.jar -jar TurboBlenderApp.jar -DFoo=Bar arg1 arg2
而不是
TurboBlenderApp arg1 arg2
我想我可以使用shell脚本(包括win32批处理文件... gacckkk),这只是我不擅长那些+我想知道是否有更简单的平台无关运行Java的方式来自命令行的app。
答案 0 :(得分:5)
-jar
时,-cp
(以及CLASSPATH
变量)将被忽略java -jar TheApp <whateverargumentsyouwant>
”不应该太难(不过,您的jar
文件清单中可以有Class-Path attribute。答案 1 :(得分:2)
如果您只想简化本地执行,请使用批处理文件,甚至只需创建自定义快捷方式。如果要创建启动程序并打包可执行jar和必需的lib进行部署,请使用Launch4j之类的内容。
答案 2 :(得分:1)
Shell脚本和批处理文件是完成所需内容的标准方法。 (查看任何主要的Java产品。)
这当然是绝对可怜和荒谬的。去Java。
您的另一种选择是编写一个C语言程序,它可以满足您的需要(创建Java进程)并为您支持的每个平台编译。 (C是真正独立于平台的语言)。
无论哪种方式,您都需要采取与平台相关的步骤,让您的应用程序在操作系统中真正感受到家的感觉。在OS X上,您需要创建.app软件包,在Windows上,您需要将图标和版本信息打包到EXE中。对于Linux,shell脚本就足够了。 : - )
答案 3 :(得分:1)
出于某种原因,这个伎俩并没有解决。您需要做的是为您的jar文件创建定义Main-class:
属性的自定义清单,并在jar文件中包含您正在使用的所有类文件。然后你需要的就是运行
$ java -jar myapp.jar
在实际操作系统上,您甚至可以只运行jar文件,因为它们将使用幻数启动它。但是如果必须的话,只需要包含该行的单行批处理或shell脚本。
Java Tutorials之一中描述了这一点。
答案 4 :(得分:1)
如果使用java -jar
启动应用程序,则可以通过向主jar清单添加Class-Path
条目,将其他jar添加到类路径中。有关详细信息,请参阅jar file spec。
答案 5 :(得分:1)
另一种解决方案是雅加达下议院,一如既往:commons-launcher。
答案 6 :(得分:0)
批处理文件可以完成这项工作。将要执行的确切命令放入文件myProg.bat并运行它。
答案 7 :(得分:0)
这很简单:
将此内容写入TurboBlenderApp.cmd:
java -cp TurboBlenderLib.jar -jar TurboBlenderApp.jar -DFoo=Bar %1 %2
//请记住saua回答关于-cp和-jar
的问题然后从命令行中编写:
TurboBlenderApp arg1 arg2
就像你想要的那样。
如果在Unix / Linux中用$ 1 $ 2替换th4e%1%2,并确保你的应用具有执行权限(如果你不知道如何做到这一点,我想你也不需要它)