2019-03-17项目结构分析Java+IDEA+Maven+
在Idea中,可以看到项目的目录如下
image.png
1、项目文件的目录
xxx-service-parent-master
2、External Libraries
外部库
引入jar包的方式
1.通过 File -> Project Structure -> Modules -> Dependencies 直接将所需的jar包或者文件夹引入;
2.先在 File -> Project Structure -> Libraries 中创建好Libraries,再通过 File -> Project Structure -> Modules -> Dependencies 引入事先定义好的Libraries;
3.使用 Maven 工具。
各方式的关系
功能上,三种引入方式是没有区别的,都能实现所需jar包的引入;如果三种方式所引入的jar包不在工程目录下,引入的内容会显示在external library里面,应该是方便用户查看吧。
通过方式2引入jar包会比方式1紧凑一些(可以把分散的jar包都整合成一个library)。
使用 Maven 工具是最方便的,只要在 pom.xml 文件中配置所需的jar包即可自动引入,但是需要能够连接到 Maven 服务器。
3、Scratches and Consoles
概念
Intellij IDEA 提供了两种临时的文件编辑环境,通过这两种临时的编辑环境,你可以写一些文本内容或者一些代码片段。两种 Scratches 分别是:Scratch files 和 Scratch buffers。
作用
我们有时候需要运行一小段代码来验证一下语句结果什么的,这个时候 Scratches 就非常有用了,不需要掺杂在项目主体代码中就可以完成。
详细介绍参见https://segmentfault.com/a/1190000014202363 或官方文档https://www.jetbrains.com/help/idea/scratches.html
项目属性
File->Project Structure
image.png
project name
项目名称、没啥好好说的。
project SDK
项目使用的Java环境,此处为1.8
Project language level
限定项目编译检查时最低要求的 JDK 特性。项目代码使用的 JDK 8 新特性:lambda 语法,但是如果 JDK 选择的却是 JDK 7,即使 language level 选择了 8 - Lambdas,type annotation etc.,也是没有多大意义的,一样会编译报错。
对于大型项目,各个 Module 用到的 SDK 和 language level 很有可能是各不一样的,IntelliJ IDEA 对此也进行了支持。
image.png
Lambda
什么是Lambda表达式?
Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)
使用Lambda有什么好处?
可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
详见https://www.cnblogs.com/knowledgesea/p/3163725.html
or https://www.cnblogs.com/franson-2016/p/5593080.html
Project compiler output
编译结果保存目录
一、整个项目使用同样的目录
二、不通模块使用不通的目录(单独设置)
image.png
Module
在 IntelliJ IDEA 中Project是最顶级的结构单元,然后就是Module,一个Project可以有多个Module。目前,主流的大型项目结构基本都是多Module的结构,这类项目一般是按功能划分的,比如:user-core-module、user-facade-module和user-hessian-module等等,模块之间彼此可以相互依赖。通过这些Module的命名可以看出,它们都是处于同一个项目中的模块,彼此之间是有着不可分割的业务关系的。
因此,我们可以大致总结出:一个Project是由一个或多个Module组成,尽量让各模块处于同一项目之中,此时彼此之间具有互相依赖的关联关系。在这里,之所以说“尽量”,是因为 IntelliJ IDEA 的Project是一个没有具备任何编码设置、构建等开发功能的,主要起到一个项目定义、范围约束、规范类型的效果,或许,我们也可以简单地理解Project就是一个单纯的目录,只是这个目录在命名上必须有其代表性的意义。在一般情况下,IntelliJ IDEA 是默认单Project单Module的,这时Project和Module合二为一,在没有修改存储路径的时候,显然Project对Module具有强约束作用啦!不过说实话,这里就是将Module的内容放在了Project的目录下,实际上还是Module自己约束自己。
Spring
在module service 是spring类型,采用sprint boot进行配置
详见 https://www.jianshu.com/p/182b5fe54e9f
Facets
Facets表述了在Module中使用的各种各样的框架、技术和语言。这些Facets让Intellij IDEA知道怎么对待module内容,并保证与相应的框架和语言保持一致。
使用Facets能让我们下载并配置framework所必须的组件,会自动生成各种各样的描述符,并存储在适当的位置,等等。
大多数Facets可以无冲突得添加到Module中。
也有一些Facets是继承其他Facets的,这些Facets的添加就必须先添加他们的父Facets,这些Facets也要依赖Intellij IDEA的相关插件是否开启.
Artifacts:
artifact是一个项目资源的组合体。例如,一个已编译的java类的集合,一个已打包的java应用。
其中war 是将项目编译并打包为war,而war exploded仅仅编译。
Output directory是输出的目录。
将项目发布到生产服务器时,建议将输出目录的war复制到tomcat的webapp目录下,tomcat会自动进行解压。
保留之前版本的war包,方面进行版本回滚。
Spring Boot
Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。
简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定。
Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录。