java模块化实战-2
作者:互联网
续接上文,上文中简单的使用了模块化, 没有使用maven, 我们也知道maven也是构建项目用的,
而且现在的项目不适用maven/gradle 来构建项目, 进行jar包的管理,那才真是灾难.
所以我们需要一个maven的例子来说明怎么使用模块化 ,maven和模块化并没有什么冲突.
此文章的例子是基于上一篇的代码,基本上就是复制过来了....你问为啥, 真是个好问题, 因为懒(本文的重点不在于代码功能)
系统环境:
系统:win7
案例使用idea版本:IntelliJ IDEA 2017.3.5 x64
jdk: oracle jdk 11.02
总的项目结构是:
一个典型的子项目结构如下:
module-info.java是在java下面的.
1.新建一个moduleDemo3的父项目
2.新建util模块
填完了artifacId就可以了...
新建module-info.java
/**
* @author zk
* @date 2019-08-28 15:59
*/
module module.util {
/**
* 在导出模块exports的时候,可以使用to关键字指明导出
* 的模块只能供哪个模块使用。当然可以指定多个模块,使用逗号
*
* requires static 语句
requires 进来的模块可以同时在编译期和运行期访问。如果只想在编译器使用,
可以在requires 后面增加 static 关键字。比如模块a依赖了模块b但是并不使用b其中
的类,另一个模块c依赖了a模块也使用了b模块的类。这样模块a的图中并不包含模块b。
*/
exports com.onyx.util2 to module.api;
}
package com.onyx.util;
/**
* @author zk
* @Description:
* @date 2019-08-28 12:11
*/
public class MyStringUtil {
public static void size(){
System.out.println("MyStringUtil spilt method");
}
}
package com.onyx.util2;
/**
* @author zk
* @date 2019-08-28 12:19
*/
public class ListUtil {
public static void size(){
System.out.println("ListUtil size method");
}
}
package com.onyx.util2;
/**
* @author zk
* @date 2019-08-28 12:13
*/
public class MapUtil {
public static void size() {
System.out.println("mapUtil size method");
}
}
3.新建base模块
新建module-info.java
/**
* @author zk
* @date 2019-08-28 15:59
*/
module module.base {
exports com.onyx.base;
}
package com.onyx.base;
/**
* @author zk
* @Description: 实体类
* @date 2019-08-28 12:17
*/
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
4.新建service模块
新建module-info.java
/**
* @author zk
* @date 2019-08-28 16:00
*/
module module.service {
exports com.onyx.service;
requires module.base;
}
package com.onyx.service;
import com.onyx.base.User;
/**
* @author zk
* @Description: 服务接口
* @date 2019-08-28 12:16
*/
public interface UserService {
void save(User user);
void login();
}
5.新建api模块
新建module-info.java
/**
* @author zk
* @date 2019-08-28 16:03
*/
module module.api {
requires module.util;
requires module.service;
requires module.base;
exports com.onyx.api;
}
package com.onyx.api;
import com.onyx.base.User;
import com.onyx.service.UserService;
import com.onyx.util2.ListUtil;
/**
* @author zk
* @date 2019-08-28 12:23
*/
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
/**
* 成功引用util的包内容
*/
ListUtil.size();
/**
* MyStringUtil 这个导包就导入不进来, public 的都导入不进来了.
*/
//MyStringUtil.size();
System.out.println(user);
}
@Override
public void login() {
System.out.println("UserServiceImpl login method");
}
}
6.新建test模块
新建module-info.java
/**
* @author zk
* @date 2019-08-28 16:05
*/
module module.test {
requires module.api;
requires module.base;
}
package com.onyx.test;
import com.onyx.api.UserServiceImpl;
import com.onyx.base.User;
/**
* @author zk
* @Description:测试
* @date 2019-08-28 12:29
*/
public class Test {
public static void main(String[] args) {
UserServiceImpl service = new UserServiceImpl();
service.login();
User user = new User(1, "zhangke");
service.save(user);
}
}
然后就可以运行了了....
说下模块化的命令, 打印可观察模块的列表,其中仅包括系统模块:
c:\Java9Revealed> java --list-modules
编译代码:
javac -d mods --module-source-path . $(find . -name "*.java")
--module-source-path 命令是 javac新的命令行选项,用于指定模块源代码的位置。
将当前目录中的代码编译到mods目录中
执行前面的代码:
java --module-path mods -m test/com.onyx.test.Test
--module-path 命令类似于--classpath,是新java的命令行选项 ,指定已编译模块的位置。
代码在同性交友平台上的地址:
https://github.com/changhe626/module-demo2
这里补上三个链接,模块化写的比我好
https://www.cnblogs.com/IcanFixIt/p/6947763.html
https://www.cnblogs.com/xiang--liu/p/9710339.html
https://www.cnblogs.com/lujiango/p/7852120.html
标签:实战,java,模块化,onyx,module,2019,模块,com,public 来源: https://blog.csdn.net/u010398771/article/details/100123023