javah 无法从 spring-context-3.0.3.jar 文件中找到依赖类
javah cannot find dependent classes from spring-context-3.0.3.jar file
正在使用 ANT 任务编译 java 类,然后使用
生成 .h 文件
javah [ version "1.7.0_55" ] on windows 7
以下是我的 build.xml
中的代码片段
...
<property name="build.dir" value="./main/test_target"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="external.lib.dir" value="./externalJars"/> <!-- contains spring-context-3.0.3.jar file -->
<property name="jni.output.dir" value="${build.dir}/jniHeaders"/>
..
...
<target name="compile-header" depends="build">
<exec executable="javah">
<arg line="-classpath ${classes.dir};${external.lib.dir} -o ${jni.output.dir}/MyNativeImpl.h -verbose -force examples.MyNativeImpl"/>
</exec>
</target>
...
..
但我无法生成 .h 文件并得到以下错误
Error: Class org.springframework.context.MessageSource could not be found.
即使我已将 "spring-context-3.0.3.jar" 添加到 externalJars 目录 => ${external.lib.dir}
我的 java 文件 MyNativeImpl.java 使用包 "import org.springframework.context.MessageSource; "
Java 文件编译正常使用 ${external.lib.dir} 并且 MyNativeImpl.class 也在 ${classes.dir}
下生成
不确定我做错了什么!!
几乎花了 1 天时间在 SS 上搜索,但可以找到特定的解决方案。
我有许多来自 spring 框架的依赖 jar,可以在 ${external.lib.dir} 下完全编译我的应用程序因此想知道如何解决这个问题,而不是 JAVAH在 .jar 文件中查找类 !!
Surprisingly I have a work-around which is:
1. unzip the contents of pring-context-3.0.3.jar to CLASSES DIR ${classes.dir}
2. now my ${classes.dir} has following contents
a. examples/MyNativeImpl.class
b. org/springframework/context/MessageSource.class ( and other classes )
3. Now JAVAH doesn't complain and generate my MyNativeImpl.h
但我现在知道为什么当我使用 spring-context-3.0.3.jar 时找不到相同的 MessageSource.class ??
我是否遗漏了什么或者这是唯一的方法:-(非常感谢任何帮助。
提前致谢
此致,
维维克
在类路径中指定 jar 时,您必须列出每个 jar。包含 jar 的目录是不够的,它只适用于 类,解释了为什么你的变通方法有效。
我建议如下:
<path id="javah.path">
<pathelement location="${classes.dir}"/>
<fileset dir="${external.lib.dir}" includes="*.jar"/>
</path>
<pathconvert property="javah.classpath" refid="javah.path"/>
<exec executable="javah">
<arg line="-classpath ${javah.classpath} -o ... />
</exec>
PS
- 你为什么不使用 javah ANT task?
正在使用 ANT 任务编译 java 类,然后使用
生成 .h 文件javah [ version "1.7.0_55" ] on windows 7
以下是我的 build.xml
中的代码片段...
<property name="build.dir" value="./main/test_target"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="external.lib.dir" value="./externalJars"/> <!-- contains spring-context-3.0.3.jar file -->
<property name="jni.output.dir" value="${build.dir}/jniHeaders"/>
..
...
<target name="compile-header" depends="build">
<exec executable="javah">
<arg line="-classpath ${classes.dir};${external.lib.dir} -o ${jni.output.dir}/MyNativeImpl.h -verbose -force examples.MyNativeImpl"/>
</exec>
</target>
...
..
但我无法生成 .h 文件并得到以下错误
Error: Class org.springframework.context.MessageSource could not be found.
即使我已将 "spring-context-3.0.3.jar" 添加到 externalJars 目录 => ${external.lib.dir}
我的 java 文件 MyNativeImpl.java 使用包 "import org.springframework.context.MessageSource; " Java 文件编译正常使用 ${external.lib.dir} 并且 MyNativeImpl.class 也在 ${classes.dir}
下生成不确定我做错了什么!!
几乎花了 1 天时间在 SS 上搜索,但可以找到特定的解决方案。 我有许多来自 spring 框架的依赖 jar,可以在 ${external.lib.dir} 下完全编译我的应用程序因此想知道如何解决这个问题,而不是 JAVAH在 .jar 文件中查找类 !!
Surprisingly I have a work-around which is:
1. unzip the contents of pring-context-3.0.3.jar to CLASSES DIR ${classes.dir}
2. now my ${classes.dir} has following contents
a. examples/MyNativeImpl.class
b. org/springframework/context/MessageSource.class ( and other classes )
3. Now JAVAH doesn't complain and generate my MyNativeImpl.h
但我现在知道为什么当我使用 spring-context-3.0.3.jar 时找不到相同的 MessageSource.class ??
我是否遗漏了什么或者这是唯一的方法:-(非常感谢任何帮助。
提前致谢
此致, 维维克
在类路径中指定 jar 时,您必须列出每个 jar。包含 jar 的目录是不够的,它只适用于 类,解释了为什么你的变通方法有效。
我建议如下:
<path id="javah.path">
<pathelement location="${classes.dir}"/>
<fileset dir="${external.lib.dir}" includes="*.jar"/>
</path>
<pathconvert property="javah.classpath" refid="javah.path"/>
<exec executable="javah">
<arg line="-classpath ${javah.classpath} -o ... />
</exec>
PS
- 你为什么不使用 javah ANT task?