IDEA项目结构:5分钟理解区分IDEA中的project、module、facet、artifact、Library、JAR和WAR
概述
大家遇见问题百度时,往往查百度得到的博客五花八门,只讲操作,也不解释为什么这么操作。我认为只有明确了IDEA的工作原理,才能熟练掌握各种繁琐的配置。一文读懂IDEA关于项目类别的划分,就算以后遇见了问题,也能搞懂自己在配什么,而不是跟着百度的教程鹦鹉学舌,照猫画虎。
文末有我自己总结的非常精短的总结。
project
idea中没有工作空间的概念,每一个项目都是一个工作空间,一个项目将一个项目的所有源代码、库和指令封装到一个单独的组织单元中。使用IntelliJ平台SDK完成的所有工作。项目定义了称为模块和库的集合。
project下的module的概念类似于eclipse中的project。一个聚合项目可以配置多个module(可以当作workspace来用)。
配置project
module
模块是一个独立的功能单元,可以独立地运行、测试和调试。模块包括诸如源代码、构建脚本、单元测试、部署描述符、依赖管理等。在一个项目中,每个模块都可以使用特定的SDK或继承在项目级别定义的SDK(参见本文下面的SDK部分)。一个模块可以依赖于项目的其他模块。
一个项目可以有一个或多个模块,比如Spring,Web。这些模块都是现有的,可用的。
Library
库是模型依赖的代码集合文件(比如JAR文件),可以从自己选择jar包或者用maven。
Facet
facet声明了每个模块使用技术的一些配置。一个模块可能有多个facet。Spring模块的配置就声明在Spring facet中。
Spring 的主类和配置文件是Spring的一些配置,但是不告诉IDEA在哪他自己是不知道在哪的,所以在facet中要写清楚在什么地方(默认会配好)。
在web模块中,需要配置web.xml和web资源目录的位置,也可以直接用默认的,一般我们建立/src/main/webapp。
web资源目录的文件夹有一个小蓝点,访问路径时"/"就是从这里开始找资源的。
artifact
artifact是放在一起测试、部署或发布您的软件解决方案或其部分的项目资产的集合(结合maven)。例如,已编译的Java类的集合或打包在Java归档中的Java应用程序、作为目录结构的Web应用程序等等。
artifact就是为了打包成为jar或war的一个配置声明。比如你想分享你的项目给小明或者想把项目发布到Tomcat上,如何分享或发布?java提供了专门打包的方法,就是jar和war,而打成JAR和WAR必须需要有一个artifact。
jar、war、exploded
jar:Java ARchive,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件或库;
war:Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;
exploded:在这里你可以理解为展开,不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来。
总结
简单总结一下,方面大家理解。
IDEA中工程(project)配好我们的JDK版本,一个工程可以包含多个模块(moduel),我们开发的一个项目包含一个或多个模块,比如Web模块、Spring模块,还要配好这些模块的配置信息。我们通过Library把我们项目中所需依赖JAR包导好。
Facet声明了我们每个模块使用技术的配置(注意和moduel结合区分理解),最重要的是在这里配好web.xml和web资源目录的位置。
在我们把项目发布到Tomcat或导出成JAR包之前,我们需要把项目打成artifact来方面部署,通常我们选择war_exploded热部署。
参考文章
https://www.jianshu.com/p/31415cba4117
https://www.cnblogs.com/wl-blog/archive/2004/01/13/13758075.html
大家遇见问题百度时,往往查百度得到的博客五花八门,只讲操作,也不解释为什么这么操作。我认为只有明确了IDEA的工作原理,才能熟练掌握各种繁琐的配置。一文读懂IDEA关于项目类别的划分,就算以后遇见了问题,也能搞懂自己在配什么,而不是跟着百度的教程鹦鹉学舌,照猫画虎。
文末有我自己总结的非常精短的总结。
project
idea中没有工作空间的概念,每一个项目都是一个工作空间,一个项目将一个项目的所有源代码、库和指令封装到一个单独的组织单元中。使用IntelliJ平台SDK完成的所有工作。项目定义了称为模块和库的集合。
project下的module的概念类似于eclipse中的project。一个聚合项目可以配置多个module(可以当作workspace来用)。
配置project
module
模块是一个独立的功能单元,可以独立地运行、测试和调试。模块包括诸如源代码、构建脚本、单元测试、部署描述符、依赖管理等。在一个项目中,每个模块都可以使用特定的SDK或继承在项目级别定义的SDK(参见本文下面的SDK部分)。一个模块可以依赖于项目的其他模块。
一个项目可以有一个或多个模块,比如Spring,Web。这些模块都是现有的,可用的。
Library
库是模型依赖的代码集合文件(比如JAR文件),可以从自己选择jar包或者用maven。
Facet
facet声明了每个模块使用技术的一些配置。一个模块可能有多个facet。Spring模块的配置就声明在Spring facet中。
Spring 的主类和配置文件是Spring的一些配置,但是不告诉IDEA在哪他自己是不知道在哪的,所以在facet中要写清楚在什么地方(默认会配好)。
在web模块中,需要配置web.xml和web资源目录的位置,也可以直接用默认的,一般我们建立/src/main/webapp。
web资源目录的文件夹有一个小蓝点,访问路径时"/"就是从这里开始找资源的。
artifact
artifact是放在一起测试、部署或发布您的软件解决方案或其部分的项目资产的集合(结合maven)。例如,已编译的Java类的集合或打包在Java归档中的Java应用程序、作为目录结构的Web应用程序等等。
artifact就是为了打包成为jar或war的一个配置声明。比如你想分享你的项目给小明或者想把项目发布到Tomcat上,如何分享或发布?java提供了专门打包的方法,就是jar和war,而打成JAR和WAR必须需要有一个artifact。
jar、war、exploded
jar:Java ARchive,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件或库;
war:Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;
exploded:在这里你可以理解为展开,不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来。
总结
简单总结一下,方面大家理解。
IDEA中工程(project)配好我们的JDK版本,一个工程可以包含多个模块(moduel),我们开发的一个项目包含一个或多个模块,比如Web模块、Spring模块,还要配好这些模块的配置信息。我们通过Library把我们项目中所需依赖JAR包导好。
Facet声明了我们每个模块使用技术的配置(注意和moduel结合区分理解),最重要的是在这里配好web.xml和web资源目录的位置。
在我们把项目发布到Tomcat或导出成JAR包之前,我们需要把项目打成artifact来方面部署,通常我们选择war_exploded热部署。
参考文章
https://www.jianshu.com/p/31415cba4117
https://www.cnblogs.com/wl-blog/archive/2004/01/13/13758075.html