Javac多模块化编译
转载:原文链接
从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多模块化编译的更多相关文章
- C语言模块化编译介绍
C语言模块化编译介绍 模块化编程的概念 所谓模块化变成(多文件开发),就是多文件(.c文件)编程,一个.c文件和一个.h文件可以被称为一个模块. 头文件开发的注意事项: 1)头文件中可以和C程序一样引 ...
- 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
如何用javac 和java 编译运行整个Java工程 (转载) http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...
- ant 使用指南---java模块化编译【转】
转自:http://www.cnblogs.com/hoojo/archive/2013/06/14/java_ant_project_target_task_run.html 一.概述 ant 是一 ...
- 利用ant的javac任务来编译java程序
<?xml version="1.0" encoding="UTF-8"?> <project name="javaTest&quo ...
- Linux内核程序的编译:模块化编译
内核在编译的时候,可以支持单独模块化编译,只需要一个小小的Makefile即可搞定. 步骤如下: 1.在任意位置创建目录 vim Makefile 2.在Makefile中添加如下代码(我的kerne ...
- 使用模块化编译缩小 apk 体积
libcocos2dlua.so编译出来有11M多,其中包含了很多不需要的模块,模块化编译,把不需要用到的模块弄成0,体积就小了. 如: 修改D:\codeide\sDiShu2formm\frame ...
- 如何用javac 和java 编译运行整个Java工程
转自:http://blog.csdn.net/huagong_adu/article/details/6929817 前言:本文教你怎么用javac和Java命令,以及如何利用脚本(she ...
- Mac下 javac java 进行编译和运行含有包路径及引入jar包的类
近两天因为刚入职,属于熟悉环境的阶段,研究了下算法(第四版),当不使用IDE工具直接使用终端进行javac 编译带有包的类,然后使用java 会出现如下错误提示: 使用谷歌搜索了很久,终于找到解决的办 ...
- linux下驱动模块化编译,动态加载以及卸载
步骤:: 1.编写first_driver_hello.c文件,将其放在/linux2.6.32/drivers/char路径下: 2.在/linux2.6.32/drivers/cha/Kconfi ...
- 使用javac,手动编译一个java文件的方法
参考<Tomcat与Java Web开发技术详解>中的命令: javac -classpath c:\tomcat\lib\servlet-api.jar ...
随机推荐
- C++中::和:, .和->的作用和区别
符号::和:的作用和区别 ::是作用域运算符,A::B表示作用域A中的-名称B,A可以是名字空间.类.结构: 类作用域操作符 "::"指明了成员函数所属的类.如:M::f(s)就表 ...
- Python基础概要(一天快速入门)
文章目录 一 编程与编程语言 二 编程语言分类 三 主流编程语言介绍 四 Python介绍 五 安装python解释器 六 第一个python程序 七 变量 八 用户与程序交互 九 基本数据类型 十 ...
- ssr服务器极致渲染
域名 RDS 云服务器 ECS 中国站 文档购物车ICP备案控制台 金秋上云季 首页 技术与产品 社区 直播 开发者学堂 开发者云 工具与资源中心 天池大赛 飞 ...
- ABP中关于Swagger的一些配置
Abp 集成 Swagger 官方文档, 请参考 Swagger Integration AspNetCore 配置 Swagger, 请参考 Swashbuckle.AspNetCore 本文的项目 ...
- JDK 动态代理原理
代理模式 客户端不直接访问目标对象,需要通过第三者来实现间接访问对象 代理对象在客户端和目标对象之间起中介作用,能够屏蔽目标对象不想让客户端知道的内容,或增加额外的服务 动态代理 JDK 动态代理:基 ...
- 生成CSR和自签名证书
CSR,全称Certificate Signing Request(证书签发请求),是一种包含了公钥和与主题(通常是实体的信息,如个人或组织)相关的其他信息的数据结构.CSR通常用于向证书颁发机构(C ...
- 9.17 多校联测 Day3 总结
全程罚坐场. 模拟赛考试状态持续低迷,为明天的状态感到深深担忧. <题目并不难,请喧哗的同学不要大声 AK>,离谱. 不保证按难度顺序排序,尝试改变策略.开始第 1h 将四道题通读一遍并做 ...
- kubernetes驱逐机制总结
概述 k8s的驱逐机制是指在某些场景下,如node节点notReady.node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点. ...
- (Good topic)哈希表:拼写单词 (3.17 leetcode每日打卡)
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌 ...
- 基础练习:FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...