转载:原文链接
从SDK9开始,Java支持多模块编译。那么,怎么用javac实现多模块编译呢?
项目介绍
先来看看我们的项目。
首先lib文件夹下是依赖模块,有一个hello模块。hello模块包含hello包,并且被导出。
然后是test,是我们的主模块,包含一个test包,里面有个叫Main的主类。
有源码的编译
首先,我们模拟,我们具有这两个类的源码时的编译。
编译命令:
javac -d .\\target\\build1 --module-source-path ".;.\\lib" .\\test\\module-info.java .\\test\\test\\Main.java
首先,-d是输出路径。--module-source-path是模块源码的保存路径。在这些路径下,直接保存这些模块的源码。文件名就是模块名(即使模块名包含".",文件名也是包含"."的模块名,而不是多级目录),这些文件名下直接就有module-info.java文件。.
路径指当前路径,也就是test包的位置,.\\lib
则是hello包的路径。
通过class文件编译
有时候,我们没有Hello包的源码,那么怎么办呢?
先模拟这个环境,编译hello包:
javac -d .\\target\\build2 --module-source-path ".;.\\lib" .\\lib\\hello\\module-info.java .\\lib\\hello\\hello\\Hello.java
此时,hello包将编译在.\\target\\build2\\hello位置,那么.\\target\\build2就是包存放的位置了。
javac -d .\\target\\build2 --module-source-path "." -p ".\\target\\build2" .\\test\\module-info.java .\\test\\test\\Main.java
然后编译test,此时使用-p来指示模块的位置。
通过jar文件编译
jar文件编译和class文件编译其实很类似,我们来试一下。
首先把hello2编译成jar。
mkdir target/build3jar -cvf .\\target\\build3\\hello.jar -C .\\target\\build2\\hello .
然后编译
javac -d .\\target\\build3 --module-source-path "." -p ".\\target\\build3" .\\test\\module-info.java .\\test\\test\\Main.java
结果非常符合预期。
写在最后
通过上面的操作,我们就能自己编译我们的java多模块工程了。当然,借助maven等工具能实现更高效的开发。
做猪小侠源码的代理,提供一站式服务
如果你不懂得搭建网站或者服务器,小程序,源码之类的怎么办? 第一通过本站学习各种互联网的技术 第二就是联系客服,我帮帮你搭建(当然要收取部分的费用) 第三成为我们的代理,我们提供整套的服务。