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

Fun*_*hor 11 java command-line manifest.mf classpath maven

我的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
"
Run Code Online (Sandbox Code Playgroud)

对于这个例子,我只放了3个jar,但是我有很多依赖项...

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

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

jon*_*son 5

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

为此有一个plexus-utils 错误报告。您可能还想使用maven-jdeps-plugin来提高它-Java ProcessBuilder API相当有用,因此不需要使用plexus-utils来运行jdeps。