转载:原文链接
从SDK9开始,Java支持多模块编译。那么,怎么用javac实现多模块编译呢?
项目介绍
先来看看我们的项目。
首先lib文件夹下是依赖模块,有一个hello模块。hello模块包含hello包,并且被导出。
然后是test,是我们的主模块,包含一个test包,里面有个叫Main的主类。
有源码的编译
首先,我们模拟,我们具有这两个类的源码时的编译。
编译命令:
javac -d .targetbuild1 --module-source-path ".;.lib" .testmodule-info.java .testtestM服务器托管网ain.java
首先,-d是输出路径。–module-source-path是模块源码的保存路径。在这些路径下,直接保存这些模块的源码。文件名就是模块名(即使模块名包含”.”,文件名也是包含”.”的模块名,而不是多级目录),这些文件名下直接就有module-info.java文件。.
路径指当前路径,也就是test包的位置,.lib
则是hello包的路径。
通过class文件编译
有时候,我们没有Hello包的源码,那么怎么办呢?
先模拟这个环境,编译hello包:
javac -d .targetbuild2 --module-source-path ".;.lib" .libhellomodule-info.java .libhellohelloHello.java
此时,hello包将编译在.targetbuild2hello位置,那么.targetbuild2就是包存放的位置了。
javac -d .targetbuild2 --module-source-path "." -p ".targetbuild2" .testmodule-info.java .testtestMain.java
然后编译test,此时使用-p来指示模块的位置。
通过jar文件编译
jar文件编译和class文件编译其实很类似,我们来试一下。
首先把hello2编译成jar。
mkdir target/build3jar -cvf .targetbuild3hel服务器托管网lo.jar -C .targetbuild2hello .
然后编译
javac -d .targetbuild3 --module-source-path "." -p ".targetbuild3" .testmodule-info.java .testtestMain.java
结果非常符合预期。
写在最后
通过上面的操作,我们就能自己编译我们的java多模块工程了。当然,借助maven等工具能实现更高效的开发。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: # yyds干货盘点 # 有一个数据对应表,遍历df数据只要df存在对应的数据就替换掉,但是这个一直报错
大家好,我是皮皮。 一、前言 前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Pandas数据处理的问题,一起来服务器托管网看看吧。问题描述: 大佬们 请问下这个问题 有一个数据对应表,然后遍历df数据只要df存在对应的数据就替换掉 但是这个一直…