gpt4 book ai didi

java - 使用 ant 运行 32 位 java 时的类路径长度

转载 作者:行者123 更新时间:2023-11-30 11:24:03 25 4
gpt4 key购买 nike

我们致力于为一家软件公司重写构建系统。他们的构建有很多生成器,使用各种 3rd 方 deps,其中之一是整个 Weblogic。我们有一个“depchain”pom,它包含所有 weblogic 依赖项。当我们在类路径中使用此 depchain 运行某种生成器时,我们会在 CreateProcess error=206, The filename or extension is too long 上失败在 32 位 JVM 上,但在 64 位上一切正常。很明显,它在类路径的长度上失败了,因为 depchain 中的每个 jar 都是 .m2 文件夹中的绝对位置(以前他们不了解二进制文件存储库和类路径是一个简单的目录)。我们使用简单的 antrun 插件执行来执行生成器。除了修剪类路径之外,有没有办法让它在 32 位 java 上工作?


UPD 经过一天的努力,我终于按照@Evgeniy Dorofeev 的想法让它工作了。我无法使用 mvn 插件,因为创建我运行的 Artifact 的部分正在执行此生成器。所以我不得不使用 ant 构建一个包含这个巨大类路径字符串的仅 list jar。类路径字符串使用绝对路径的问题,我不得不将其转换为相对路径(MANIFEST.MF 格式)。它本身就令人头疼:

        <var name="relative.classpath.property"/>
<for param="curr.dep" list="${combined_classpath}" delimiter=";">
<sequential>
<local name="relative.dep.location"/>
<property name="relative.dep.location" relative="true" basedir="${project.build.directory}" value="@{curr.dep}"/>

<local name="classpath.hack.temp"/>
<propertyregex property="classpath.hack.temp"
input="${relative.dep.location}"
regexp="\\"
replace="\/"
default="${relative.dep.location}"
global="true"/>


<var name="relative.classpath.property" value="${relative.classpath.property} ${classpath.hack.temp}"/>
</sequential>
</for>

然后用所有这些东西构建一个 jar:

<jar jarfile="${project.build.directory}/classpath.hack.jar">
<manifest>
<attribute name="Class-Path" value="${relative.classpath.property}"/>
</manifest>
</jar>

然后是我的 <java>将只有 ${project.build.directory}/classpath.hack.jar在类路径中

最佳答案

您可以将 Class-Path 属性添加到您的应用程序 jar list 中,这就是我们在 Maven 中的做法

  <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
...
</plugin>

这样类路径长度就没有限制

关于java - 使用 ant 运行 32 位 java 时的类路径长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com