一个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语言之间的参数传递和方法调用。