java - 缩短命令行的类路径 (-cp)

标签 java maven command-line classpath manifest.mf

我的 maven 构建在 jdeps 插件上失败(我们需要它升级到 jdk11)。

Windows 的命令行太长。 这是我得到的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jdeps-plugin:3.1.1:jdkinternals (default) on project myproject:
[ERROR] Exit code: 1 - La ligne de commande est trop longue.
[ERROR]
[ERROR] Command line was: cmd.exe /X /C 
"
    "C:\Program Files\Java\jdk-11.0.2\bin\jdeps.exe"
    -cp "
        C:\Users\Me\.m2\repository\com\something\firstJar.jar;
        C:\Users\Me\.m2\repository\com\somethingElse\secondJar.jar;
        C:\Users\Me\.m2\repository\com\somethingDifferent\someOtherJar.jar;
        ... and one more
        ... and another one
        ... I think you get the idea......."
    --multi-release 9 D:\git\myworkspace\myproject\target\classes
"

例如,我只放了 3 个 jar ,但我有很多依赖项...

如何缩短此命令行?(并确保它不依赖于用户)

限制:这是一个共享项目,仅在我的计算机上更改任何内容都不是解决方案。

最佳答案

maven-jdeps-plugin 使用 plexus-utils 派生一个子进程来运行 jdeps 可执行文件。 plexus-utils 通过构建命令行并将其传递给 cmd.exe 来实现这一点。这是错误的方法,因为它将受到 cmd.exe 强加的 8192 个字符的限制。正确的方法是使用 Java ProcessBuilder API。这本身使用 ProcessImpl.create API 方法,在 Windows 上,该方法通过调用 CreateProcess 的 Win32 API 实现。后一个 API 有 32k 个字符的限制,这对于大多数用例来说应该足够了。

有一个 plexus-utils bug report为了这。您可能还想使用 maven-jdeps-plugin 来构建一个 - Java ProcessBuilder API 非常有用,因此无需仅使用 plexus-utils 来运行 jdeps。

关于java - 缩短命令行的类路径 (-cp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55123717/

相关文章:

java - 在 Google App Engine 上用 java 解压缩一个大 blob

java - 无法运行 jar 文件,出现错误“无法找到或加载主类”(Maven 项目)

java - session.setAttribute ("authManager",经理)抛出NotSerializedException

java - 随机数生成器生成重复项

java - 错误 :maven-resources-test:twitter_storm_new: java. lang.NegativeArraySizeException

windows - 如何在 Windows 中从命令行为 *.accdb 创建用户 DSN?

python - 如果所有 child 都停止并阻止其他 child 产生,则终止/重新启动 python 脚本

linux - 如何压缩文件夹或目录及其所有文件(除了删除某些文件夹中的文件)?

java - 为什么 Marathon 无法在组合框中正确选择?

java - 未找到 .classpath 和 .project