模块依赖性是指一个模块依赖于或需要另一个模块。模块依赖性在“ 在Eclipse IDE中使用Java 9开发模块,第1部分 ” 一文中的“ 声明其他模块的依赖性”部分中介绍。在两篇文章的第一篇“ 使用模块依赖关系,第1部分 ”中,我们为两个模块创建了两个Java项目,一个主模块和一个依赖模块。我们无法在一个Java项目中创建这两个模块,因为Eclipse IDE不支持单个项目中的多个模块。创建了两个项目后,在这篇续篇文章中,我们将每个项目导出到一个单独的JAR文件中。在早期的教程中讨论了将模块导出和用作JAR文件,“使用Java 9模块作为JAR文件。“目前不支持在单个JAR中添加多个模块,但计划用于未来的Java版本。在本文中,我们将讨论配置两个Java项目并运行主模块应用程序演示模块依赖。本文包含以下部分:

设置主Java项目的构建路径

之前开发的两个Java项目存在错误,如图1中的红色标记所示。指示错误是因为两个模块在单独的项目中定义,并且依赖项目不在主项目的构建路径中。

图1:带有错误的Java项目

在本节中,我们将配置MainModule项目的构建路径,以将HelloJavaModule项目添加到构建路径。右键单击Package Explorer中的MainModule,然后选择Build Path> Configure Build Path,如图2所示。

图2: Package Explorer>构建路径>配置构建路径

Properties窗口中,将显示Java Build Path默认设置,如图3所示。

图3: Java构建路径

选择Projects选项卡并选择Modulepath,如图4所示。单击Add ...

图4: Java构建路径>项目>模块路径>添加...

要求的项目选择窗口显示的依赖项目HelloJavaModule,如图5.选择HelloJavaModule项目,然后单击确定。

图5:选择要添加的项目

该HelloJavaModule项目被添加到ModulePath进行(见图6)。单击“ 应用并关闭”

图6:添加到Modulepath的Java项目HelloJavaModule

错误和红色标记将从MainModule项目中删除,如图7所示。

图7:从MainModule中删除的错误

将主Java项目导出到JAR文件

将HelloJavaModule项目添加到MainModule项目的构建路径只会消除构建/编译时错误。对于运行时,我们需要将每个模块导出到JAR文件,并将JAR文件添加到运行项目运行时的运行时模块路径中。需要将JAR文件导出到同一文件夹,以便我们能够配置模块路径而无需跨项目引用模块。如前所述,尚不支持多模块JAR,但计划在更高版本的Java中支持。

要将MainModule项目导出到JAR文件,请右键单击Package Explorer中的MainModule并选择Export,如图8所示。

图8: Package Explorer> MainModule> Export

Export窗口中,选择Java> JAR file,如图9所示,然后单击Next。

图9:导出> Java> JAR文件>下一步

JAR文件规范中,选择要导出为MainModule的资源,如图10所示。选择导出目标为MainModule modules mainmodule.jar。点击下一步。

选择默认的JAR Packaging Options(参见图11),然后单击Next。

图11:选择包装选项

接下来,自定义JAR清单规范,其中包括选择应用程序入口点的类。单击Browse for Main class,如图12所示。

图12:主类>浏览

Select Main Class中,选择main.module包中的MainModule类,如图13所示,然后单击OK。

图13:选择主类

主类中选择,单击完成,如图14。

图14: JAR导出>完成

所述mainmodule.jar被导出到MainModule /模块目录,如图包资源管理器在图15中。

图15:导出的JAR mainmodule.jar

将依赖项Java项目导出到JAR文件

在本节中,我们将依赖项目HelloJavaModule导出到与导出主模块JAR相同的目录中的JAR文件。要将HelloJavaModule项目导出到JAR文件,请在Package Explorer中右键单击该项目,然后选择Export(参见图16)。

图16: Package Explorer> HelloJavaModule> Export

Export窗口中,选择Java> JAR file,如图17所示,然后单击Next。

图17:导出> Java> JAR文件>下一步

JAR文件规范中,选择要导出为HelloJavaModule的资源,如图18所示。选择与主模块JAR相同的导出目标,即MainModule modules目录。JAR文件名需要不同,并且是helloJavaModule.jar。点击下一步。

图18:依赖性JAR的JAR文件规范

选择默认的JAR Packaging Options,如图19所示,然后单击Next。

图19:选择包装选项

接下来,自定义JAR清单规范。因为依赖项目不包含应用程序入口点的类,所以将Main类字段保持为空,如图20所示,然后单击Finish。

图20:依赖项目没有主类

所述helloJavaModule.jar被导出到MainModule /模块目录,如图包资源管理器在图21中。

图21:导出的JAR helloJavaModule.jar

添加运行配置

要运行主模块Java应用程序,我们需要为MainModule项目创建运行配置。右键单击Package Explorer中的MainModule,然后选择Properties,如图22所示。

图22: Package Explorer> MainModule> Properties

在Properties窗口中,选择Run / Debug Settings并单击New ...以创建新的启动配置,如图23所示。

图23:属性>运行调试设置>新建...

Select Configuration Type中,选择Java Application,如图24所示。

图24:选择配置类型作为Java应用程序

在配置向导中,在Name字段中指定一个名称(MainModuleConfig),并选择Project作为MainModule,单击Search ...作为Main类,如图25所示。

图25:设置启动配置属性

Select Main Type中,选择main.module.MainModule类型(参见图26),然后单击OK。

图26:选择主要类型

主类中选择,单击参数选项卡以选择下一个虚拟机指定参数时,如图27。

图27:选择Arguments选项卡

将以下VM参数添加到VM参数字段,如图28所示。

--module-path modules / helloJavaModule.jar; modules / mainmodule.jar -m mainModule / main.module.MainModule

所述--module路径 ARG设置模块路径两个JAR用于两个模块。该-m ARG设置模块。单击Apply,如图28所示。

图28:应用运行配置设置

单击OK,如图29所示,完成运行配置。

图29:完成运行配置

将创建一个新的运行配置MainModuleConfig,如图30所示。单击Properties窗口中的Apply和Close

图30:为MainModule项目应用属性

运行主模块Java应用程序

接下来,我们将测试主模块是否通过运行主模块应用程序来调用依赖模块。在Package Explorer中右键单击MainModule.java,然后选择Run As> Java Application(参见图31)。

图31: Package Explorer> MainModule> Run As> Java Ap

Java应用程序的输出显示在Console中,如图32所示。主模块中的“Hello from”消息与消息“Exported Java Module!”结合在一起。从依赖模块输出消息“Hello from Exported Java Module!”。

图32:控制台输出

在两篇文章中,我们讨论了在Java 9中使用模块依赖性。

欢迎大家在评论区进行留言讨论,写的不好莫怪...

新建模块 pom.xml依赖无法识别_使用模块依赖关系,第2部分相关推荐

  1. 【Exception】 javax.xml.bind.annotation.adapters 不可见 已在模块 java.xml.bind 中声明, 但该模块不在模块图中

    [Exception] javax.xml.bind.annotation.adapters 不可见 已在模块 java.xml.bind 中声明, 但该模块不在模块图中 一.问题描述 1.将项目中J ...

  2. idea导入maven项目依赖报错_解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?

    1.何为依赖冲突 Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的.Maven的依赖机制会导致Jar包的冲突. 举个例子,现在你的项目中,使用了两个Jar包,分别是A和B.现在A需要依赖 ...

  3. python把模块装到文件夹中_把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案...

    把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功 解决办法是: 在该文件夹下加入空文件__init__.py python2会把 ...

  4. 人物关系 人脸识别_内在美人物关系介绍图谱 - 电视剧 - 星关系

    <内在美>主要人物关系介绍 顶级巨星.通过上百张面孔诠释多样演技的"百面美人",同时也是一个麻烦制造者,绯闻制造机,走到哪儿都有闪光灯聚焦.然而就是这样一位巨星,却有着 ...

  5. pom.xml中pom全称_摆脱pom XML…几乎

    pom.xml中pom全称 介绍 POM文件是XML格式的文件,声明性地描述了要使用Maven构建的Java项目的构建结构. 维护大型Java项目的POM XML文件通常很麻烦. XML是冗长的,PO ...

  6. maven pom.xml解析、命令说明、依赖传递、继承、聚合、properties、build、依赖范围、版本仲裁、profile

    maven是当前Java项目中用到最多的依赖管理工具.最开始的项目比较小引入的依赖包也少所以可以通过手动加载jar包的方式来管理依赖包:但随着项目越来越复杂各种大小框架层出不穷,一个项目的开发往往依赖 ...

  7. eclipse2022.6版本新建maven项目时pom报错:Cannot find the declaration of element ‘project‘. pom.xml

    新建maven项目时,pom.xml文件默认是这样的: < project xmlns= " http://maven.apache.org/POM/4.0.0 " xmln ...

  8. 摆脱pom XML…几乎

    介绍 POM文件是XML格式的文件,声明性地描述了要使用Maven构建的Java项目的构建结构. 维护大型Java项目的POM XML文件通常很麻烦. XML是冗长的,POM的结构也需要维护冗余信息. ...

  9. 史上最全的 pom.xml 文件详解

    一.什么是POM Project Object Model,项目对象模型.通过xml可扩展标记语言(EXtensible Markup Language)格式保存的pom.xml文件.作用类似ant的 ...

  10. @Entity报错,配置pom.xml

    @Entity需要引用import javax.persistence.Entity; import javax.persistence.Entity; @Entity public class Us ...

最新文章

  1. tensorflow1.0 2.0区别
  2. JQuery整体简化学习
  3. GNSS用户设备的组成及原理——以GPS用户设备为例
  4. 真快!10秒内将k8s集群运行起来
  5. 内容推荐策略产品经理的方法和实践
  6. decode 大于比较 小于_「oracle decode」【ORACLE】Oracle提高篇之DECODE - seo实验室
  7. 如何使用 Secret?- 每天5分钟玩转 Docker 容器技术(108)
  8. Idea设置全局highlighting level 为Syntax
  9. js操作Cookie,js设置Cookie值,js读取Cookie值
  10. App测试查看日志(详细)
  11. canvas视频录制
  12. excel把多个工作表合并
  13. fail2ban 的使用
  14. hdu1754(线段树单点更新)
  15. offsetLeft理解以及MouseEvent接口中的screenX,clientX,pageX,offsetX区别.
  16. 数据结构严蔚敏代码合集 严书数据结构代码实现 可直接运行 持续更新by myself
  17. 电子商务安全体系架构
  18. 滕州一中计算机竞赛,滕州一中3名学生“叶圣陶杯”获佳绩!高三学生蒋雨含获决赛一等奖...
  19. SPU/SKU/商品
  20. VMware vSphere 6.7虚拟化云管理之12、VCSA6.7更新vCenter Server许可

热门文章

  1. 1074 Reversing Linked List (25)(25 分)
  2. 浪潮服务器怎么获取cpu信息,浪潮获取cpu、内存、硬盘等信息(redfish协议+restfull协议)...
  3. team网卡配置_Linux中多个网卡配置(team的配置方式)
  4. lisp用entmake生产圆柱体_蚌埠踏步板钢盖板沟盖板生产加工厂家材质齐全-老友网...
  5. virtuoso根据原理图绘制版图并联接_Cadence教程2——反相器原理图仿真以及版图绘制...
  6. 系统服务器ping偶尔超时,云服务器ping超时原因
  7. 查询结果取交集_MySQL Using intersect 交集
  8. idirect3ddevice9虚函数偏移_C++ 虚函数简介
  9. delphi 联合体_校园动态 | 西安市碑林区大学南路小学“名校+”教育联合体召开“合木论坛”...
  10. yum安装mysql my.cnf_Linxu Yum方式安装Mysql