作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在从 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 <jni.h>
</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/
我是一名优秀的程序员,十分优秀!