当前位置: 首页 > 知识库问答 >
问题:

在执行Java时可以使用-cp参数两次吗?

拓拔君博
2023-03-14

我正在尝试运行一个具有许多依赖项的Java应用程序。在过去,我使用以下命令启动应用程序

java -cp "program.jar:jar1.jar:jar2.jar:jar3.jar:[...]" program

然而,随着依赖项列表的增加,我将它们移到了一个参数文件中,该文件的内容包括:

-cp "\
program.jar:\
jar1.jar:\
jar2.jar:\
jar3.jar:\
[...]"

我正在用

java @arguments-file program

到目前为止,一切正常。

有时我最终会得到测试版的程序。jar,它们共享所有相同的依赖项,但程序不同。jar被重命名为程序测试版。jar。

因此,要运行jar,将使用以下命令

java -cp "program-beta.jar:jar1.jar:jar2.jar:jar3.jar:[...]" program

或者更具体地说,我将使用一个环境变量,以便可以使用相同的脚本,并且该变量将设置为任意一个程序。jar或程序测试版。jar,视情况而定

java -cp "$PROGRAM_JAR:jar1.jar:jar2.jar:jar3.jar:[...]" program

现在我正在使用一个参数文件,我希望能够执行以下操作:

java -cp "$PROGRAM_JAR" @arguments-file program

然而,两次使用-cp会导致忽略其中一个,从而产生java。lang.ClassNotFoundException异常。

有没有什么方法可以让我按名称指定一个jar文件,但要抽象掉所有其他文件,这样我的java命令就不会有数千个字符了?

这将完全在Linux上运行,因此任何命令行“魔术”,例如使用grep都可以,只要生成的代码易于阅读

共有1个答案

翟宏放
2023-03-14

您可以只编写两个bash脚本。sh和β。包含程序参考的sh。jar和程序测试版。jar。

此外,类路径可以包含通配符(请参阅手册页),因此如果您可以确保磁盘上只存在两个版本中的一个,则可以这样编写:

java -cp "program*:jar1.jar:jar2.jar:jar3.jar:[...]"

从长远来看,您可能会考虑使用Maven或Gradle构建/运行它,具体取决于您的需求。

 类似资料:
  • 问题内容: 我上面的代码作为Spark驱动程序,当我执行程序时,它可以正常工作,将所需数据保存为Parquet文件。 但是我观察到我在RDD上的映射器函数被执行两次。首先,当我读为使用 第二时,当我将其写入 实木复合地板文件时 您能指导我如何避免这种重复执行吗?还有其他更好的方法将JSON字符串转换为Dataframe吗? 问题答案: 我认为原因是JSON阅读器缺少架构。执行时: Spark必须为

  • 我使用以下方法定义了一个简单的实现: 当我在没有任何Spring cloud依赖项的情况下运行时,我会得到以下日志: 它还两次提到“在...开始应用程序”这句话。 这种行为有什么特别的原因吗?我正在尝试编写一个,它依赖于已经创建的特定bean。但是,如果我添加spring cloud,当它第一次到达方法时,上下文尚未创建,因此当前抛出一个错误。

  • 从HomeActivity我正在尝试从CreateProfileActivity获取结果。在这里我要做什么来开始这个活动 以下是HomeActivity中方法的实现: 当im完成并按下save in后,下面是我将数据发送回HomeActivity的操作: 在上调用setResult方法一次,但由于某种未知原因,当数据到达方法时,get execute两次。第一个结果的和第二个结果的。在此之后,得到

  • 问题内容: 我这里有一个简单的测试方法,该方法设置为每5秒运行一次,但确实可以,但是查看System.out可以看到它似乎在做一些奇怪的事情。 输出: 为什么每次都运行TWICE (出现)? 问题答案: 该注释位于此链接的第25.5.1节下,内容如下: 确保不要在运行时初始化同一@Scheduled注释类的多个实例,除非你确实希望为每个此类实例计划回调。与此相关,请确保不要在使用@Schedule

  • 问题内容: 这是一个按钮: 和绑定事件: 一切正常,都发现一件麻烦事,我在Chrome开发者控制台中看到两个请求: 添加/ cartManager: 添加/ cartManager / add ?: 两者的请求标头几乎相同,只是请求标头不同: 第一个是 cartManager / add?pictureId = 等,第二个是 cartManager / add /?pictureId- / add

  • 问题内容: 我有一个从Qt Designer派生的简单窗口 (design.py) ,其中包含三个单选按钮: 并且我添加了此代码,以便监视选中了哪个单选按钮。 我注意到,如果选中radioButton1,它似乎可以正常工作,但是如果选中radiobutton2或radiobutton3,则将检查消息打印两次。 另一方面,如果我将每个信号都连接到不同的功能,例如: 然后它会按预期工作。 因此,我想将