玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定(下)

简介: 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定(下)

新建Java依赖库


New Library新建菜单选项中选择Java选项:

image.png


image.png

这种方式简单的讲:从你本机里选择一个jar(或者一个目录里面包含jar、文档)就成。优点是非常轻便,不依赖网络,缺点是这些jar必须是你本机已实际存在的。


新建Maven依赖库


New Library新建菜单选项中选择From Maven选项:


image.png


输入GAV(或者关键字查找)就能定位到jar,此种方式使用起来其实非常方便,毕竟maven非常好用嘛。缺点自然就是一般情况下需要都需要依赖于网络喽,除非你本地仓库已存在对应的jar。


通过这两种方式各执行一次添加新的依赖完成后,再看hello模块的依赖情况,效果如图:


image.png


既然依赖变化了,自然而然的也会体现在hello.iml文件里喽,来看看:


image.png


依赖添加进来,源代码里就可以正常使用啦:


image.png


依赖作用范围


在New Library创建依赖的时候,不管用哪种方式选中后,它都会弹出这个窗口让你选择此依赖的作用范围


image.png


  • Module Library:模块级别,只能本模块使用,别的模块看都看不见
  • Project Library(默认选中):项目级别,该项目下所有的模块均能看见和选中使用
  • Global Library:全局级别,任何项目均可看见和使用


在本例中commons-io是模块级别,commons-lang3是项目级别。因此hello-client模块添加依赖时也是能够看到commons-lang3这个依赖的(但看不见commons-io):


image.png


Libraries页情况


image.png


当某Library是所有/大部分模块都需要的依赖时,就可以上升为Project级别的依赖,抽取到Libraries标签页来统一管理。如图,因为上面步骤创建的commons-lang3是项目级别的,所以也会出现在这里。


至于如何创建/添加Project级别的依赖,这里就不用再赘述了吧,上面【新增依赖】章节已讲得很明白。唯一区别在该页面选好后不用再选择Library的作用范围了(因为就是Project级别的嘛),取而代之的是让你选择作用的模块:


image.png


当然喽,你也可以一个都不选(点击cancle),那么该jar只是被创建了,而不作用于任何module模块。


说明:对于一个多模块的Project来讲,建议项目使用的所有Jar都放在这里统一管理,模块要使用时直接按需choose就成,而不需要自己再单独add,方便统一管理


Facets页情况


image.png



Facets可理解为用于配置Project项目的框架区,它能看到项目的每个Module模块使用的框架、语言等情况,并且还可以对它们进行配置。


比如Spring框架,如果某个模块使用了它就可以来这里统一配置。优点是你会发现借助IDEA强大的功能它都给你想好了哪些地方可配置,你可以更改,让你实现配置界面化。除了Spring,其它框架如Hibernate也是如此~


目前支持的Facets(语言/框架)类型有:


image.png


模块对应的Facets IDEA会自动Detection探测,若没有你也可以手动添加。


为了更形象的描述此tab页的作用,这里搬一个我自己生产项目来看看实际效果:


image.png


image.png


说明:不同的Facet对应的最右端窗口内容配置项是不一样的。


通过此视窗,可以看到你当前Project项目,哪些模块使用了Spring框架,哪些是web项目,一目了然。它有个非常大的作用就是站在Project的视角对每个模块进行整体把控,比如若你发现有个模块不需要是web项目(并不需要对外提供服务接口),那铁定就是多引包了或者职责不清晰导致的,就可立马针对性解决,消除隐患。


在实际工作中我自己比较频繁的使用这个功能,用于对模块性质的定位,比如如果是普通模块,绝对不允许是web工程,如果不需要依赖Spring绝对不允许成为Spring工程。因为严格控制Jar包依赖、工程性质是应对大型项目的有效手段。


当然喽,Facets还有个作用是让IDEA编译器认识你的模块,比如如果你是个web模块,若没有在Facets里体现出来,那IDEA就不认识你,就无法给你提供web的一些便捷操作了。


Artifacts页情况


IDEA如何打Jar包?如何打War包? 来,上菜~


image.png


在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:


image.png


image.png


配置好后,只需顶部菜单栏Build -> Build Artifacts,就可以打出这个Jar包:


image.png


image.png


执行完此命令后,在Output Directory里就能看到hello.jar这个打包好的文件啦。然后java -jar .\hello.jar就能运行喽(因为咱们打的是可执行Jar包)。关于使用IDEA打包还包括打可执行jar包、Fatjar、包外引用jar包等等,这里就不展开了,后面会放在单独文章里把各种方式汇总在一起聊聊。


总的来说,无论配置Facets还是Artifacts,都是Intellij IDEA要求我们来做的(虽然有些可自动识别),目的是以便其能识别这些文件并整合各插件实现功能(如自动化配置、自动打包),一切为了编码体验和编码效率。


模块如何依赖其它Module


一个中大型项目一般有多个模块,它们各司其职。模块与模块之间一般都存在依赖关系,比如常见的xxx-core模块一般会被其它几乎所有模块所依赖。模块依赖外部库Library知道怎么搞了,那么如何增加本项目的模块依赖呢?


其实道理和步骤基本一样,比如hello-core模块里有个Person类:


image.png


hello-service模块也需要用到Person类及其功能,那么就需要把hello-core模块依赖进来,操作步骤如下:


添加Dependency依赖时,请选择Module Dependency...选项:


image.png


选择本项目中需要依赖进来的模块:


image.png


选中hello-core模块把它依赖到hello-service里来:


image.png


点击ok,搞定了。对应的,此依赖关系也会体现在hello-service.iml这个配置文件上:


image.png


如此,我们就可以在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的话题暂且先聊到这。其实我想到的主题还有好几个,如:


  • IDEA如何主动去识别导入不能被自动识别的Maven项目?原理是什么呢?
  • IDEA如何打可执行Jar包?又如何打FatJar?如何打 包外Jar包(散包) 呢?
  • IDEA如何巧用其最新的Http Client脚本能力,结合对Controller的嗅探快速完成本地测试?

有你pick的吗?欢迎留言告诉我,需求多就尽快上号,不然这个专题就暂时告一段落啦,把时间继续花在其它专题上啦。


本文思考题


本文所属专栏:IDEA,后台回复专栏名即可获取全部内容。本文已被https://www.yourbatman.cn收录。


看完了不一定懂,看懂了不一定会。来,文末3个思考题帮你复盘:


  1. Module模块如何单独设置JDK版本?
  2. IDEA如何打jar包?
  3. 开个脑洞:Maven用pom管理项目结构,IDEA是如何识别它的呢?
相关文章
|
2月前
|
Java
可直接编辑jar包的IDEA插件-JarEditor
IDEA自带的反编译插件虽可查看jar包中的class文件,但无法直接编辑。为解决此问题,作者开发了JarEditor插件,可在IDEA中直接编辑jar文件内的class及资源文件,无需解压或手动编译。点击Jar Editor可修改代码,通过Save/Compile保存并编译,Build Jar则将更改写回jar包。该插件简化了jar包编辑流程,提高了开发效率。
196 4
可直接编辑jar包的IDEA插件-JarEditor
|
1月前
|
Java
IDEA的fxml打开Scene Builder后空白! Scene Builder下载依赖后还是空白不显示 无论如何都不显示,网上的教程试过来了遍还是不显示
本文提供了三种方法来解决IDEA中fxml文件在Scene Builder中打开后显示空白的问题:检查JavaFX是否安装、切换IDEA版本、下载Scene Builder插件。
173 1
|
4月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
465 2
[JarEditor]可直接修改jar包的IDEA插件
|
3月前
|
Java Maven
intellij idea如何查看项目maven依赖关系图
这篇文章介绍了如何在IntelliJ IDEA中查看项目的Maven依赖关系图,包括使用Maven工具栏和相关操作来展示和查看依赖细节。
|
4月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
微服务
idea 配置 service 服务,多模块同时启动
idea 配置 service 服务,多模块同时启动
887 7
|
4月前
|
Java Maven
idea安装并使用maven依赖分析插件:Maven Helper
idea安装并使用maven依赖分析插件:Maven Helper
2588 7
|
4月前
|
Java Maven
idea导入maven项目结构不全
idea导入maven项目结构不全
175 6
|
4月前
idea 查看类的继承结构及其子类
idea 查看类的继承结构及其子类
79 5
|
4月前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

热门文章

最新文章

下一篇
无影云桌面