Java 缩短命令行的类路径(-cp)
我的maven内置在jdeps插件上失败(我们需要它升级到jdk11) 命令行对于windows来说太长。 以下是我得到的错误:Java 缩短命令行的类路径(-cp),java,maven,command-line,classpath,manifest.mf,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] 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罐,但我有这么多的依赖关系
如何缩短此命令行?(并确保它不依赖于用户)
限制:这是一个共享项目,仅在我的计算机上更改任何内容都不是一个解决方案。maven jdeps插件正在使用plexus utils派生一个子进程来运行jdeps可执行文件。plexus utils通过构建命令行并将其传递给cmd.exe来实现这一点。这是错误的方法,因为它将受到cmd.exe施加的8192字符限制的限制。正确的方法是使用JavaProcessBuilderAPI。这本身使用ProcessImpl.create API方法,该方法在Windows上由对CreateProcess的Win32 API调用实现。后一个API有一个32k字符的限制,这对于大多数用例来说应该足够了
这有一个神经丛。您可能还想用maven jdeps插件提出一个问题—Java ProcessBuilder API非常有用,因此不需要使用plexus utils来运行jdeps。最好的方法是使用清单中配置的类路径创建空jar文件
甲骨文的官方文件在
maven jar
插件确实支持更新清单类路径属性:可能是一个有点厚颜无耻的解决方案,但是
使用env变量怎么样
set MR=C:\Users\Me\.m2\repository\
"C:\Program Files\Java\jdk-11.0.2\bin\jdeps.exe"
-cp "
%MR%\com\something\firstJar.jar;
%MR%\com\somethingElse\secondJar.jar;
没有测试,希望它能工作…这就是Maven管理大量依赖项的原因,因为您可以简单地将所有依赖项都放在.pom文件中。使用集中的依赖项列表,Maven可以看到运行程序所需的几乎所有内容。看看这篇文章,它做了你正在尝试的事情,但是添加了每个jar,让Maven看到它们 此外,也是.pom基础知识的良好指南 请阅读www.maven.apache.org上的pom指南
由于清单规范的原因,Maven不会以您尝试的方式使用cmdline参数。这就是程序员(包括我自己)喜欢Maven的根本原因,因为它可以让生活变得更简单,因为它是为满足您的需要而构建的。随着文件的更改,您有一个文件可以生成更新版本 如果您使用的是Windows 10周年更新或Windows Server 2016或更高版本,则可以将最大路径长度增加到超过260个字符的默认值 您可以将以下两行复制到扩展名为
.reg
的文件中并将其打开
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
或者,打开注册表编辑器并浏览到该位置,然后将值从0更改为1。因此,我很长一段时间都在努力解决这个问题,最终在执行maven build时找到了使用过长类路径的解决方案。 这是一种变通方法,但效果非常好 从linux运行构建-这不是玩笑(原文如此!)
- 通过以下操作在Windows上打开WSL(Linux的Windows子系统)
- 完成后,只需在windows上运行Linux子系统
- 编辑linux-maven settings.xml
/usr/share/maven/conf/settings.xml
- 添加或覆盖
(/mnt/c/.m2)-是否从WSL看到我的windows maven repo路径/mnt/c/.m2
- cd/path/to/your/project
- mvn构建