我的 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/