<property name="path.src" value="src" />
8 <target name="echo">
9 <echo>build properties</echo>
10 </target>
11 </project>
这个构建组件中使用了一种常用的技术,即将变量(属性定义)与内置的变量(构建步骤 )分离。
在异构UNIX系统间可靠的迁移Java应用(4)
时间:2011-04-16 IBM Shen Yu
构建 JNI 组件
可以使用 Ant 和 JDK 的组合对 Java 代码进行编译和部署,同样地,可以使用 Ant、 Make、GCC 和 JDK 的组合对 JNI 组件进行编译和部署。这个过程比较复杂,因为它需要下 列内容:
三种编译器:javah、javac 和 GCC
两种构建工具:Ant 和 Make
下面的清单 8、9、10、11 和 12 显示了包括 Java 代码、本地代码、一个 Ant 脚本和 一个 Makefile 的 JNI 构建组件。这个 JNI 组件还实现了输出 Hello 的任务。
清单 8. 在本地方法中输出 Hello
1 package hello;
2 public class Test {
3 public static native void hello();
4 static {
5 System.loadLibrary("libhello");
6 }
7 /**
8 * @param args
9 */
10 public static void main(String[] args) {
11 hello();
12 }
13 }
清单 9. 从 Hello.clas 编译得到的 Header 文件
1 /* DO NOT EDIT THIS FILE - it is machine generated */
2 #include <jni.h>
3 /* Header for class Test */
4 #ifndef _Included_Test
5 #define _Included_Test
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 /*
10 * Class: Hello
11 * Method: hello
12 * Signature: ()V
13 */
14 JNIEXPORT void JNICALL Java_Test_hello
15 (JNIEnv *, jclass);
16 #ifdef __cplusplus
17 }
18 #endif
19 #endif
在异构UNIX系统间可靠的迁移Java应用(5)
时间:2011-04-16 IBM Shen Yu
清单 10. 本地代码
1 #include "hello_Hello.h"
2 #include <stdio.h>
3 JNIEXPORT void JNICALL Java_Test_hello
4 (JNIEnv * env, jclass jobj) {
5 printf("Greeting from build system – jni component! \n");
6 }
清单 11. 构建 JNI 组件的 Ant 脚本
1 <?xml version="1.0"?>
2 <project default="compile" basedir=".">
3 <echo message="pulling in property files" />
4 <import file="properties.xml" />
5 <echo message="compile jni greeting" />
6 <target name="compile" depends="compile- native">
7 <mkdir dir="${path.dist.classes}" />
8 <javac destdir="${path.dist.classes}" srcdir="${path.src}" />
9 </target>
10 <target name="compile-java">
11 <mkdir dir="${path.dist.classes}" />
12 <javac destdir="${path.dist.classes}" srcdir="${path.src}" />
13 </target>
14 <!-- native tasks start here -->
15 <target name="compile-header" depends="compile- java">
16 <javah destdir="${path.dist.classes}" classpath="${path.dist.c
|