哪个Ant版本支持OpenJDK 11和OpenJDK 17?

huangapple go评论103阅读模式
英文:

Which Ant version supports OpenJDK 11 and OpenJDK17?

问题

我们正在从IBM JDK 8迁移到Open JDK 11。我们的构建目前正在使用ANT 1.7.0,当我使用OpenJDK 11和ant 1.7.0构建项目时,出现以下错误

/home/devs/sbx/sand1_7000_db1/perimeter/build.xml:83: java.lang.ClassFormatError: Invalid Constant Pool entry Type 18

Total time: 3 seconds

所以,我认为这是ANT与JDK 11不兼容所致。请帮我了解哪个ANT版本支持open JDK 11和open JDK 17。

这是build.xml第83行的内容:

<!-- *********************************************************** -->
<!-- Custom Targets                                              -->
<!-- *********************************************************** -->
<target name="checkDependencies" depends="validate">
    <depend srcDir="${clump.root.dir}/product/isolatedSrc:${clump.root.dir}/build/product/classes"
            destdir="${clump.root.dir}/build/product/classes"
            cache="depcache.product"
            closure="yes">
    </depend>
</target>

这是-debug模式下的错误:

checkDependencies:
[depend] Adding class info for com.sterlingcommerce.perimeter.VersionInfo

BUILD FAILED
/home/devs/sbx/sand1_7000_db1/perimeter/build.xml:83: java.lang.ClassFormatError: Invalid Constant Pool entry Type 18
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
at org.apache.tools.ant.Main.runBuild(Main.java:698)
at org.apache.tools.ant.Main.startAnt(Main.java:199)
at org.apache.tools.ant.launch.Launcher run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.lang.ClassFormatError: Invalid Constant Pool entry Type 18
at org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPoolEntry.readEntry(ConstantPoolEntry.java:159)
at org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPool.read(ConstantPool.java:67)
at org.apache.tools.ant.taskdefs.optional.depend.ClassFile.read(ClassFile.java:72)
at org.apache.tools.ant.taskdefs.optional.depend.AntAnalyzer.determineDependencies(AntAnalyzer.java:91)
at org.apache.tools.ant.util.depend.AbstractAnalyzer.getClassDependencies(AbstractAnalyzer.java:99)
at org.apache.tools.ant.taskdefs.optional.depend.Depend.determineDependencies(Depend.java:344)
at org.apache.tools.ant.taskdefs.optional.depend.Depend.execute(Depend.java:689)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
... 11 more

谢谢
Dev

英文:

We are moving from IBM JDK 8 to Open JDK 11. Our build is using ANT 1.7.0 currently, and I am getting below error when I build project with OpenJDK 11 using ant 1.7.0

/home/devs/sbx/sand1_7000_db1/perimeter/build.xml:83: java.lang.ClassFormatError: Invalid Constant Pool entry Type 18

Total time: 3 seconds

So, I suppose that due to the incompatibility of ANT with JDK 11. Please help me to know which ANT version supports open JDK 11 and open JDK 17.

Here is what is there in the line 83 of build.xml,

<!-- *********************************************************** -->
<!-- Custom Targets                                              -->
<!-- *********************************************************** -->
<target name="checkDependencies" depends="validate">
    <depend srcDir="${clump.root.dir}/product/isolatedSrc:${clump.root.dir}/build/product/classes"
            destdir="${clump.root.dir}/build/product/classes"
            cache="depcache.product"
            closure="yes">
    </depend>
</target>

Here is the error in -debug mode,

checkDependencies:
[depend] Adding class info for com.sterlingcommerce.perimeter.VersionInfo

BUILD FAILED
/home/devs/sbx/sand1_7000_db1/perimeter/build.xml:83: java.lang.ClassFormatError: Invalid Constant Pool entry Type 18
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
at org.apache.tools.ant.Main.runBuild(Main.java:698)
at org.apache.tools.ant.Main.startAnt(Main.java:199)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.lang.ClassFormatError: Invalid Constant Pool entry Type 18
at org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPoolEntry.readEntry(ConstantPoolEntry.java:159)
at org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPool.read(ConstantPool.java:67)
at org.apache.tools.ant.taskdefs.optional.depend.ClassFile.read(ClassFile.java:72)
at org.apache.tools.ant.taskdefs.optional.depend.AntAnalyzer.determineDependencies(AntAnalyzer.java:91)
at org.apache.tools.ant.util.depend.AbstractAnalyzer.getClassDependencies(AbstractAnalyzer.java:99)
at org.apache.tools.ant.taskdefs.optional.depend.Depend.determineDependencies(Depend.java:344)
at org.apache.tools.ant.taskdefs.optional.depend.Depend.execute(Depend.java:689)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
... 11 more

Thanks
Dev

答案1

得分: 0

异常 ClassFormatError: Invalid Constant Pool entry Type 18 是因为您使用的 Ant 版本中的 Depend 任务不知道如何处理 Invoke Dynamic 字节码指令。这个问题在 Ant 1.9.0 中得到了修复:

https://github.com/apache/ant/commit/b103f7e3

可能在 OpenJDK 11/17 中会遇到其他问题,最好的解决办法是简单地使用 Ant 的最新版本。

英文:

The exception ClassFormatError: Invalid Constant Pool entry Type 18 occured because the Depend task in the version of Ant you used didn't know how to handle the Invoke Dynamic bytecode instruction. This issue was fixed in Ant 1.9.0:

https://github.com/apache/ant/commit/b103f7e3

You may get other issues with OpenJDK 11/17 though, the best is to simply use the latest version of Ant.

huangapple
  • 本文由 发表于 2023年3月20日 22:38:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/75791675.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定