转载:原文链接

从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等工具能实现更高效的开发。

Javac多模块化编译的更多相关文章

  1. C语言模块化编译介绍

    C语言模块化编译介绍 模块化编程的概念 所谓模块化变成(多文件开发),就是多文件(.c文件)编程,一个.c文件和一个.h文件可以被称为一个模块. 头文件开发的注意事项: 1)头文件中可以和C程序一样引 ...

  2. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  3. ant 使用指南---java模块化编译【转】

    转自:http://www.cnblogs.com/hoojo/archive/2013/06/14/java_ant_project_target_task_run.html 一.概述 ant 是一 ...

  4. 利用ant的javac任务来编译java程序

    <?xml version="1.0" encoding="UTF-8"?> <project name="javaTest&quo ...

  5. Linux内核程序的编译:模块化编译

    内核在编译的时候,可以支持单独模块化编译,只需要一个小小的Makefile即可搞定. 步骤如下: 1.在任意位置创建目录 vim Makefile 2.在Makefile中添加如下代码(我的kerne ...

  6. 使用模块化编译缩小 apk 体积

    libcocos2dlua.so编译出来有11M多,其中包含了很多不需要的模块,模块化编译,把不需要用到的模块弄成0,体积就小了. 如: 修改D:\codeide\sDiShu2formm\frame ...

  7. 如何用javac 和java 编译运行整个Java工程

    转自:http://blog.csdn.net/huagong_adu/article/details/6929817      前言:本文教你怎么用javac和Java命令,以及如何利用脚本(she ...

  8. Mac下 javac java 进行编译和运行含有包路径及引入jar包的类

    近两天因为刚入职,属于熟悉环境的阶段,研究了下算法(第四版),当不使用IDE工具直接使用终端进行javac 编译带有包的类,然后使用java 会出现如下错误提示: 使用谷歌搜索了很久,终于找到解决的办 ...

  9. linux下驱动模块化编译,动态加载以及卸载

    步骤:: 1.编写first_driver_hello.c文件,将其放在/linux2.6.32/drivers/char路径下: 2.在/linux2.6.32/drivers/cha/Kconfi ...

  10. 使用javac,手动编译一个java文件的方法

    参考<Tomcat与Java Web开发技术详解>中的命令: javac -classpath c:\tomcat\lib\servlet-api.jar                  ...

随机推荐

  1. VideoCapture

    from xgoedu import XGOEDU import time #实例化edu XGO_edu = XGOEDU() XGO_edu.lcd_text(50,50,'hello',colo ...

  2. 通过资源名称得到资源id

    demo地址 主要应用类 package com.example.activitylibrary; import android.app.Activity; import android.os.Bun ...

  3. 计算机三级网络技术备考复习资料zhuan

    计算机三级网络技术备考复习资料     第一章  计算机基础 分析:考试形式:选择题和填空题,6个的选择题和2个填空题共10分,都是基本概念 1.计算机的四特点:有信息处理的特性,有广泛适应的特性,有 ...

  4. 用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子

    用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子 wmproxy 将实现http/https代理, socks5代理, 后续将实现websocket代理, 内外网穿透等, 会将实现过 ...

  5. sql删除进程

    使用一下语句杀掉进程 USE master go DECLARE @dbname VARCHAR(200) SET @dbname = 'xxxx' --要关闭进程的数据库名 DECLARE @sql ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (132)-- 算法导论11.2 4题

    四.用go语言,说明在散列表内部,如何通过将所有未占用的槽位链接成一个自由链表,来分配和释放元素所占的存储空间.假定一个槽位可以存储一个标志.一个元素加上一个或两个指针.所有的字典和自由链表操作均应具 ...

  7. 栈与队列应用:逆波兰计算器(逆波兰表达式;后缀表达式)把运算符放到运算量后边 && 中缀表达式转化为后缀表达式

    1 //1.实现对逆波兰输入的表达式进行计算如(2-1)*(2+3)= 5 就输入2 1 - 2 3 + * //先把2 1 压栈 遇到-弹栈 再把2 3压进去 遇到+弹栈 最后遇到*弹栈 2 //2 ...

  8. 栈与队列应用:迷宫问题(DFS非最短路径)

    //先输入行列,在输入迷宫 以-1 -1 结束 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 #define ...

  9. go基础-接口

    一.概述 接口是面向对象编程的重要概念,接口是对行为的抽象和概括,在主流面向对象语言Java.C++,接口和类之间有明确关系,称为"实现接口".这种关系一般会以"类派生图 ...

  10. 旺店通·企业奇门和用友BIP接口打通对接实战

    旺店通·企业奇门和用友BIP接口打通对接实战 接通系统:旺店通·企业奇门 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企 ...