玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定(下)
New Library新建菜单选项中选择Java选项
这种方式简单的讲 从你本机里选择一个jar 或者一个目录里面包含jar、文档 就成。优点是非常轻便 不依赖网络 缺点是这些jar必须是你本机已实际存在的。
New Library新建菜单选项中选择From Maven选项
输入GAV 或者关键字查找 就能定位到jar 此种方式使用起来其实非常方便 毕竟maven非常好用嘛。缺点自然就是一般情况下需要都需要依赖于网络喽 除非你本地仓库已存在对应的jar。
通过这两种方式各执行一次添加新的依赖完成后 再看hello模块的依赖情况 效果如图
既然依赖变化了 自然而然的也会体现在hello.iml文件里喽 来看看
依赖添加进来 源代码里就可以正常使用啦
在New Library创建依赖的时候 不管用哪种方式选中后 它都会弹出这个窗口让你选择此依赖的作用范围
在本例中commons-io是模块级别 commons-lang3是项目级别。因此hello-client模块添加依赖时也是能够看到commons-lang3这个依赖的 但看不见commons-io :
Libraries页情况
当某Library是所有/大部分模块都需要的依赖时 就可以上升为Project级别的依赖 抽取到Libraries标签页来统一管理。如图 因为上面步骤创建的commons-lang3是项目级别的 所以也会出现在这里。
至于如何创建/添加Project级别的依赖 这里就不用再赘述了吧 上面【新增依赖】章节已讲得很明白。唯一区别在该页面选好后不用再选择Library的作用范围了 因为就是Project级别的嘛 取而代之的是让你选择作用的模块
当然喽 你也可以一个都不选 点击cancle 那么该jar只是被创建了 而不作用于任何module模块。
说明 对于一个多模块的Project来讲 建议项目使用的所有Jar都放在这里统一管理 模块要使用时直接按需choose就成 而不需要自己再单独add 方便统一管理
Facets可理解为用于配置Project项目的框架区 它能看到项目的每个Module模块使用的框架、语言等情况 并且还可以对它们进行配置。
比如Spring框架 如果某个模块使用了它就可以来这里统一配置。优点是你会发现借助IDEA强大的功能它都给你想好了哪些地方可配置 你可以更改 让你实现配置界面化。除了Spring 其它框架如Hibernate也是如此~
目前支持的Facets 语言/框架 类型有
模块对应的Facets IDEA会自动Detection探测 若没有你也可以手动添加。
为了更形象的描述此tab页的作用 这里搬一个我自己生产项目来看看实际效果
说明 不同的Facet对应的最右端窗口内容配置项是不一样的。
通过此视窗 可以看到你当前Project项目 哪些模块使用了Spring框架 哪些是web项目 一目了然。它有个非常大的作用就是站在Project的视角对每个模块进行整体把控 比如若你发现有个模块不需要是web项目 并不需要对外提供服务接口 那铁定就是多引包了或者职责不清晰导致的 就可立马针对性解决 消除隐患。
在实际工作中我自己比较频繁的使用这个功能 用于对模块性质的定位 比如如果是普通模块 绝对不允许是web工程 如果不需要依赖Spring绝对不允许成为Spring工程。因为严格控制Jar包依赖、工程性质是应对大型项目的有效手段。
当然喽 Facets还有个作用是让IDEA编译器认识你的模块 比如如果你是个web模块 若没有在Facets里体现出来 那IDEA就不认识你 就无法给你提供web的一些便捷操作了。
IDEA如何打Jar包 如何打War包 来 上菜~
在Maven大行其道的今天 虽然用IDEA打包很少使用了 但是有些时候它对你本地调试还是蛮有用的 并且对理解maven的打包依旧有效 来 了解一下。
Artifacts这个概念不是特别好理解 artifact是maven里的一个概念 被IDEA借鉴过来。表示某个模块要何种打包形式 如jar、war exploded、war、ear等等。Artifact是一个项目资源的组合体 整合编译后的 java 文件 资源文件等。有不同的整合方式 比如jar、war、war exploded等等 对于一个module而言 有了Artifact就可以部署了 类似于maven的package打包。
说明 war 和 war exploded区别就是后者不压缩 开发时选后者便于实时看到修改文件后的效果
来个栗子 这里演示下将hello模块打包成一个Jar
配置好后 只需顶部菜单栏Build - Build Artifacts 就可以打出这个Jar包
执行完此命令后 在Output Directory里就能看到hello.jar这个打包好的文件啦。然后java -jar .\hello.jar就能运行喽 因为咱们打的是可执行Jar包 。关于使用IDEA打包还包括打可执行jar包、Fatjar、包外引用jar包等等 这里就不展开了 后面会放在单独文章里把各种方式汇总在一起聊聊。
总的来说 无论配置Facets还是Artifacts 都是Intellij IDEA要求我们来做的 虽然有些可自动识别 目的是以便其能识别这些文件并整合各插件实现功能 如自动化配置、自动打包 一切为了编码体验和编码效率。
一个中大型项目一般有多个模块 它们各司其职。模块与模块之间一般都存在依赖关系 比如常见的xxx-core模块一般会被其它几乎所有模块所依赖。模块依赖外部库Library知道怎么搞了 那么如何增加本项目的模块依赖呢
其实道理和步骤基本一样 比如hello-core模块里有个Person类
hello-service模块也需要用到Person类及其功能 那么就需要把hello-core模块依赖进来 操作步骤如下
添加Dependency依赖时 请选择Module Dependency...选项
选择本项目中需要依赖进来的模块
选中hello-core模块把它依赖到hello-service里来
点击ok 搞定了。对应的 此依赖关系也会体现在hello-service.iml这个配置文件上
如此 我们就可以在hello-service模块里正常使用Person类啦
public static void main(String[] args) { System.out.println(new Person());
完美。
本文对IntelliJ IDEA的项目结构Project Structure的每个tab页进行了全面分析 据我短浅的目光所及 可能是全网独一份写这个内容的。很多同学觉得IntelliJ IDEA不需要专门的学习分析 会用它导入maven项目 跑跑main函数启动下Spring Boot就成啦 我却不以为然。
衡量一个新手和一个高手的差异不是顺风顺水时 而是遇到问题时谁能够快速解决 谁又只能望洋兴叹 相信薪资的差异也体现在此。我见过的“高手”对自己最常用的工具用得都是很666的 这不正是技术范该有的样子麽 说到底 我们不可能认为用一指禅敲代码的人会是大牛嘛~
好啦 关于IDEA的话题暂且先聊到这。其实我想到的主题还有好几个 如
有你pick的吗 欢迎留言告诉我 需求多就尽快上号 不然这个专题就暂时告一段落啦 把时间继续花在其它专题上啦。
本文所属专栏 IDEA 后台回复专栏名即可获取全部内容。本文已被https://www.yourbatman.cn收录。
看完了不一定懂 看懂了不一定会。来 文末3个思考题帮你复盘
相关文章
- IDEA Maven导入本地jar包
- docker 运行后端项目出错,查看日志,错误信息为:Error: Unable to access jarfile /xxx/xxx.jar
- [转]玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
- 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
- eclipse jar包 中文乱码 解决方案
- idea如何导入jar包(详细)
- java -jar 指定端口或配置文件启动jar
- idea maven 仓库中有jar包, 依赖却爆红。
- 【Java】+exe4j+jar包打成exe可执行程序
- 【IDEA】+将一个项目打成一个jar包,并在另一个项目中用这个jar包中的类(测试模块里的类没法用)
- 命令行方式使用abator.jar生成ibatis相关代码和sql语句xml文件
- maven-assembly-plugin打包可执行的jar包
- 破解 jar 包之直接修改 .class 文件方式
- IDEA 打包jar
- Java部署_IntelliJ创建一个可运行的jar包(实践)
- Java笔记17:导出可执行jar包
- python调用java加密jar包并带参数,获取返回值
- groovy-2.4.11.jar时出错; invalid LOC header (bad signature)
- idea查看jar冲突和解决方法