如何从包含大罐子列表的控制台运行java? [复制]

Posted

技术标签:

【中文标题】如何从包含大罐子列表的控制台运行java? [复制]【英文标题】:How to run java from console with included big list of jars? [duplicate] 【发布时间】:2013-08-07 14:17:10 【问题描述】:

我有一些使用 30 个 jar 的 Java 程序。

今天我知道我可以这样做:

java -cp 1.jar;2.jar.....;30.jar; MyApplication -param1 AA -param2 BB

看起来很乱吗?

如何将所有 jar 分组到一个组(文件),就像 Eclipse 对 .classpath 所做的那样

谢谢,

【问题讨论】:

【参考方案1】:

您可以使用通配符添加特定文件夹中的所有文件,如 here 所示

【讨论】:

这不应该是一个答案,而是一个近距离投票。或者至少一条评论。 @JoachimSauer 我认为 the-funky-monkey 没有足够的声誉来发表评论 - 所以答案是唯一的选择 @mschenk74:如果我没记错的话,当您还没有关闭权限时,可以“标记为重复”。【参考方案2】:

这看起来很乱吗?绝对地!在这些情况下,我经常编写一个批处理/shell 脚本来简单地调用java -cp 命令。

拥有特定脚本的优点是您依赖于环境变量 (CLASSPATH),因此不同的脚本/可执行文件可以使用不同的 jar 集。

请注意,如果您使用 Ant/Maven 等构建项目,它们将提供选项以使用与您构建程序相同的类路径(或其派生路径)运行程序。

例如

$ mvn exec:java

【讨论】:

在我的例子中,我从 java 应用程序的外部程序列表运行,其中每个程序都基于一组 jars (hadoop/hive/jmx .....)。【参考方案3】:

使用环境变量,并将其传递给 -cp 选项

从 Java 6 开始,您可以使用通配符选项在一个目录中包含多个 JAR。这是一个例子:

java.exe -classpath $HOME/myjars/* Main

【讨论】:

【参考方案4】:

如果您的 Java 程序被捆绑为 jar 文件,您可以使用 jar 清单文件中的类路径属性来声明运行程序所需的其他 jar。通过这样做,您只需在命令行上列出您自己的 jar。

在Setting multiple jars in java classpath查看oxbow_lakes的答案

【讨论】:

【参考方案5】:

Unix 解决方案:

要使其成为半动态且仍然易于在终端中使用,您可以将 alias 添加到您的 .bashrc / .bash_profile 以存储包含的 jar。

alias javal="java -cp 1.jar:the-rest-of-your-jars.jar:2.jar:30.jar:" 添加到您的 bash 配置文件将可以只执行javal MyApplication -param1 AA -param2 BB。当您想添加更多 jar 时,只需更新您的 .bashrc / .bash_profile。当然你可以使用任何命令名来代替javal

关于别名here的简单解释。

-edit- 谢谢@mschenk74

【讨论】:

但这仅适用于使用 bash 作为 shell 的系统。它不能在 Windows 中开箱即用。 @mschenk74 +1 这是无可否认的事实 ;)

以上是关于如何从包含大罐子列表的控制台运行java? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何一次性包含 CLASSPATH 中特定目录中的所有 jar? [复制]

为啥猪的工作罐子这么大

如何 console.log 大对象? [复制]

如何在 Java 中创建列表列表并添加任何类型的列表? [复制]

装配,包括我的罐子

使 Maven 将依赖项复制到 target/lib