一个maven的典型目录结构:
src/main/java src/main/resources src/test/java src/test/resources
根据含义src代码源码库, main代表主代码 test表示测试代码。java表示java部分。
那么如果再加上C语言部分,那目录可以这样安排 src/main/java src/main/c — c语言部分 src/test/java src/test/c — c语言测试代码 src/test/resources include —引用的其它c语言头文件 lib —引用的其它动态链接库
使用maven编译c语言,还是要用插件:
org.fusesource.hawtjni
maven-hawtjni-plugin
1.13
这个插件会帮你生成一个c语言工程(主要是configure文件和makefile文件),并帮你编译成so文件,并放到jar包的指定目录下,非常好用。
示例配置如下:
org.fusesource.hawtjni
maven-hawtjni-plugin
1.10
build-linux64
${project.artifactId}
${project.build.directory}/linux64
${basedir}/src/main/c
${basedir}/target/classes/
--with-arch=x86_64
CFLAGS=-I${basedir}/include
LDFLAGS=-L${basedir}/lib
LIBS=-lXXXX
linux64
true
true
generate
build
compile
configureArgs 里包含了makefile需要的参数,其中XXXX表示你依赖的库名,也可以加上更多你需要的其它的参数。 假设你的工程名叫hello。执行mvn clean package 之后 maven会帮你在你的target/native-build目录下生成一个c语言工程,并执行相应操作系统的编译。 就比如上面的linux64位系统,最终会生成一个libhello.so文件到你的jar包的META-INF/native/linux64/ 目录下 你可以用各种手段使用System.loadLibrary加载它。
下一篇学习java和c语言之间的参数传递和方法调用。