如果我按如下方式运行jar
java -jar Name.jar arg1 arg2 arg3
可以理解的是,在导出(创建.jar)时,我必须指定Eclipse运行配置以识别main方法,因为可能有与主类一样多的主方法。
如果我从Eclipse中运行一个主程序,它会静默地创建一个新的运行配置,这会在我想要导出时为运行配置选项增加更多的混乱。如果我为很多类执行此操作,则很可能我有许多基本相同的运行配置,唯一的区别是指定的主要方法。
如果我按如下方式运行jar
java -cp Name.jar package.MyObject arg1 arg2
java -cp Name.jar package.MyOtherObject arg1
然后可能会忽略标识main方法的Eclipse运行配置。入口点在命令行中标识。在这种情况下,Eclipse在导出过程中需要运行配置,这似乎创造了一件苦差事,但似乎没有办法避免这种情况。
我更喜欢通过-cp
选项运行我的.jar,因为它可以让我访问许多入口点。这样,当我想访问不同的入口点时,我不必重新导出。关于使用哪个入口点的决定被推迟到我想要运行的时间。我不必决定何时出口。我保持灵活性。
我知道另一种方法是只有一个arg1
来指定任务,所以我只能依靠一个运行配置来识别具有大型switch语句的main方法,然后始终使用-jar
选项。
如果我使用-jar
,则存在许多运行配置的混乱。如果我使用-cp
,那么导出过程中似乎会出现一个令人讨厌的步骤,其中涉及许多运行配置的混乱。有没有办法使用Eclipse来避免这两个问题?
答案 0 :(得分:0)
打开项目并选择File
和Export
以及Java
和JAR file
。不要选择Runnable JAR file
。
默认情况下,项目文件夹中的每个文件都被复选框作为要导出的资源,您可能想要取消选中其中的部分或全部文件。遗憾的是Eclipse不记得这一点,所以每次导出时都可能需要取消资源检查。
复选src
目录,遗憾的是它显示您要导出源,但实际上您需要复选它才能导出相应的.class
文件。
复选框Export generated class files and resources
。
浏览到要导出或覆盖的目标JAR文件。
点击finish
。
Eclipse不会将第三方JAR文件视为上述步骤2中的资源,因此您需要找到一种方法在调用Java时将它们提供给-classpath
或-cp
。我们需要这样做的原因是因为Eclipse导出了一个" JAR文件"它似乎没有遵循第三方JAR文件的构建路径。这是Eclipse在导出" Runnable JAR文件时所具有的功能。但那不是我们在这里做的。您可以手动创建第三方JAR文件的目录,并让Java在-classpath
中展开通配符。
linux中的Java调用示例:
java -cp ~/directory/destination.jar:/home/username/directory/thirdparty/"*" com.domain.package.MyObject arg1 arg2 arg3
请注意,在linux上我们可以允许bash扩展您自己的JAR文件的~
," destination.jar"。对于第三方JAR文件,使用长格式/home/username
,因为波浪线扩展可能无法在字符串的中间工作,就在冒号之后。
如果我们想要使用Java *
通配符 - 与bash命令行通配符不同 - 对于第三方JAR文件,必须引用*
字符(make文字)以便将通配符传递给Java。
以这种方式导出消除了选择运行配置的需要,并解决了提示问题的问题。
除此之外:如果您自己的JAR导出到与第三方JAR相同的目录,则类路径更简单:
java -cp ~/singleDirectory/"*" com.domain.package.MyObject arg1 arg2 arg3