gpt4 book ai didi

java - Apache ant javah 任务不适用于 jdk 10+

转载 作者:行者123 更新时间:2023-11-30 05:19:54 29 4
gpt4 key购买 nike

我们正在从 jdk 1.8 迁移到 jdk13。在我们的 build.xml 中,我们有

<target name="generate-native-headers" depends="compile,resolve" description="Java to Native">
<javah class="com.zimbra.znative.IO" outputfile="${build.dir}/IO.h" classpathref="build.class.path"/>
</target>

但是java10+不再支持javah,所以我发现我们可以使用javac“nativeheaderdir”来实现这一点 - https://ant.apache.org/manual/Tasks/javac.html#nativeheaderdir

所以我尝试将上面的 javah 任务转换为 javac,如下所示

<target name="generate-native-headers" depends="compile,resolve" description="Java to Native">
<javac srcdir="src/java/com/zimbra/znative" nativeHeaderDir="${build.dir}" classpathref="build.class.path" includes="src/java/com/zimbra/znative/IO.java" />
</target>

现在丢失的 javah 错误消失了,但我没有看到构建目录中生成的 IO.h 文件。谁能帮助我,该怎么做?非常感谢您的帮助,谢谢。

注意:目录 src/java/com/zimbra/znative 有大约 5-6 个 .java 文件。我只提到了 1 个文件的示例。

最佳答案

我看不出有什么明显的方法可以说服 javac 任务执行此操作。 nativeHeaderDir=生成 header ,但不会像您发现的那样连接。

后 javac 解决方法可能如下所示 - 使用 Ant <concat> 将每个类的 header 合并到单个文件中任务:

<concat destfile="IO.h">
<header>/* DO NOT EDIT THIS FILE - it is machine generated */
#include &lt;jni.h&gt;
</header>
<concat destfile="IO.h">
<fileset dir="${build.dir}" includes="*.h" />
<filterchain>
<linecontainsregexp negate="true">
<regexp pattern="(#include .jni.h.)|(DO NOT EDIT THIS FILE - it is machine generated)" />
</linecontainsregexp>
</filterchain>
</concat>
</concat>

基本思想很简单:找到javac生成的所有头文件,将它们连接成一个具有所需名称的头文件。或者,在此过程中,删除重复的 #include 和注释行。结果应该与 JDK 8 javah 生成的 header 相同。

关于java - Apache ant javah 任务不适用于 jdk 10+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59728471/

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