# IDEA 2020.1.1
::: details 目录
[[toc]]
:::

## 下载
### 官网下载

下载页面：[https://www.jetbrains.com/idea/download/#section=windows](https://www.jetbrains.com/idea/download/#section=windows)

下载地址：[https://download.jetbrains.com/idea/ideaIU-2020.1.1.exe?_ga=2.167364414.1627481570.1590717942-16051737.1590627630](https://download.jetbrains.com/idea/ideaIU-2020.1.1.exe?_ga=2.167364414.1627481570.1590717942-16051737.1590627630)

### 百度网盘下载
链接：[https://pan.baidu.com/s/1HlI1atmeOiHs4dLK668T6w ](https://pan.baidu.com/s/1HlI1atmeOiHs4dLK668T6w)

提取码：y7xa

## 安装
运行安装程序“ideaIU-2020.1.1.exe”；

![安装 idea](./img/idea_001.jpg)

点击“Next”按钮； 

![安装 idea](./img/idea_002.jpg)

输入或点击“Browse”按钮选择 IDEA 的安装文件夹，点击“Next”按钮；

![安装 idea](./img/idea_003.jpg)

按上图所示，勾选对应的安装属性。点击“Next”按钮；

![安装 idea](./img/idea_004.jpg)

点击“Install”按钮，开始安装；

![安装 idea](./img/idea_005.jpg)

点击“Finish”按钮，完成安装。
## 初次启动
初始启动 IDEA 会弹出“IntelliJ IDeA Agreement”对话框。

![初始化 idea](./img/idea_006.jpg)

勾选“I confirm that I have read and accept the terms of the User Agreement”接受用户协议，点击“Continue”按钮继续；

![初始化 idea](./img/idea_007.jpg)

点击“Dont't Send”按钮，不发送信息；

![初始化 idea](./img/idea_008.jpg)

IDEA 有暗色与亮色两种风格的界面主题，选择自己喜欢的界面主题。点击“Skip Remaining and Set Default”按钮接受 IDEA 默认设置；

![初始化 idea](./img/idea_009.jpg)

选择“Evaluate for free”选项，点击“Evaluate”按钮，开启 30 天试用。

![初始化 idea](./img/idea_010.jpg)

## 破解
解压文件“jetbrains-agent-latest.zip”，复制“jetbrains-agent\lib”文件夹中的“jetbrains-agent.jar”文件到“D:\IDE\JetBrains”；

![破解 idea](./img/idea-crack_001.jpg)

将文件“jetbrains-agent.jar”手动到 IDEA 的欢迎窗口上，IDEA 将安装该代理插件；

![破解 idea](./img/idea-crack_002.jpg)

点击“Restart”按钮，重新启动 IDEA ；

![破解 idea](./img/idea-crack_003.jpg)

激活方式选择“Activation code”，然后点击“为 IDEA 安装”按钮，按钮破解补丁；

![破解 idea](./img/idea-crack_004.jpg)

点击“是(Y)”按钮，重新启动 IDEA ；

### 验证破解是否成功

![破解 idea](./img/idea-crack_005.jpg)

在 IDEA 欢迎的欢迎对话框，点击右下角的“Get Help”下拦菜单，点击“About”菜单，打开 IDEA 的关于对话框；

![破解 idea](./img/idea-crack_006.jpg)

在关于对话框可以看到“Subscription is active until July 8,2089”，则表明破解成功！


## 配置
![配置 idea](./img/idea-setting_001.jpg)

idea 配置需要点击主窗口菜单 “File” -> “Settings...” 打开配置对话框，如下图：

![配置 idea](./img/idea-setting_002.jpg)

### 配置字符集 （UTF-8）
UTF-8 解决中文乱码，面向国际化 , 防止字符集不一样导致出现乱码。

![配置 idea](./img/idea-setting_008.jpg)

在配置对话框中点击 Editor -> File Encodings , 有三个地方需要改为UTF-8 ，最下面的字符不要忘记勾选否则会不生效。

### 配置 Copyrigth 
代码中添加 Copyrigth 标明代码从什么机构出品，从 Copyrigth 可以知道代码是否出自同一机构，对代码编写人员会产生归属感、荣誉感。

![配置 idea](./img/idea-setting_003.jpg)

配置每个代码文件注释头，在配置对话框点击 Editor -> Copyrigth -> Copyrigth Profiles 然后点击+（加号）。 

![配置 idea](./img/idea-setting_004.png)
 
创建名称为 persagy 的 Copyrigth ，persagy 为公司标志。

![配置 idea](./img/idea-setting_005.jpg)
 
点击 persagy ，替换框选内容，点击 apply 保存 ，内容如下:
::: details 查看样式
``` 
**********************************************************************************************************************

         !!
       .F88X
       X8888Y
     .}888888N;
       i888888N;        .:!              .I$WI:
         R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
         .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
           +888888N;  .8888888Y                                  "&&8Y.}8,
           ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
             ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
             18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
           .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
           8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
         i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
       .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
     .:R888888I
     .&888888I                                          Copyright (c) 2009-$today.year.  博锐尚格科技股份有限公司
       ~8888'
       .!88~                                                                     All rights reserved.

**********************************************************************************************************************
```
:::

![配置 idea](./img/idea-setting_006.jpg)

点击 Copyrigth 然后点击下拉三角选择 persagy ,然后点击 Apply -> OK 保存选择的配置

![配置 idea](./img/idea-setting_007.jpg)
 
点击主菜单 Code -> Update Copyrigth... 在对话框中点击 Update Copyrigth 就完成了对所有文件的设置

### 配置 gradle
使用 gradle 构建管理，方便自动构建减少手动开发，语法简洁易懂，不受不同操作系统限制

#### 官网下载

下载页面：[https://services.gradle.org/distributions/](https://services.gradle.org/distributions/)

#### 百度网盘下载
链接：[https://pan.baidu.com/s/13qkQlBKXh_hlIOkjUErpbw](https://pan.baidu.com/s/13qkQlBKXh_hlIOkjUErpbw)

提取码：excc 

根据使用的 ide 以及个人开发需求选择需要的 Gradle 版本下载， 解压到D盘server-gradle (D:\server-gradle)

#### idea 配置 Gradle

![配置 idea](./img/idea-setting_009.jpg)

点击配置菜单 Build Execution, Deployment -> Build Tools ， Gradle user home: 选择下载后Gradle的地址，Use Gradle from 选择 Specified location 后面选择和上面一样的 Gradle 地址即可。

![配置 idea](./img/idea-setting_010.jpg)

点击右侧 Gradle 在浮动窗口中点击刷新图标进行项目构建。

## 项目创建
当一个新项目刚开始立项时或想要写一个测试 demo 时，我们需要建立一个新项目，那么问题来了，我们要使用哪种编译器，当然这里介绍的是 idea ,既然使用 idea 要选择哪种构建工具那，maven 或 Gradle
可能需要看个人习惯，或者团队开发规范，或者公司制定的开发规范手册，由于我们团队使用的 Gradle 所以使用 Gradle 来完成项目的构建，至于 maven 和 Gradle 对比就不在陈述了。idea 创建项目需要填写
域名，对开发而言就是我们经常说的包名，这个也要看团队或者公司的规范，一般都是用公司的域名来做包名，如果你是随便做一个测试 demo 可以随意，或你的公司团队没有要求那就看个人了。例如我们公司的域名
com.persagy.server 因为我要创建的是后端项目所以域名后面使用的是 server， 还有开发语言的选择，这个不是必须的，可以建好项目后再决定你的开发语言，在这里我们以 kotlin 为例，因为我们团队是使用 kotlin 开发的，
至于 kotlin 优缺点，这里就不做陈述了，准备工作做好了，我们开始创建项目之旅吧。

* 打开 idea 创建项目有两个路径可以打开建立项目页面, 1.已经打开别的项目了 2.没有打开过任何项目，或  点击 Close Project 关闭了项目，重新打卡 idea

    * 从以打开的项目处创建新项目
    
    ![创建项目 idea](./img/idea-project_001.jpg)

    在以打开的项目上方菜单点击 File ,然后鼠标移到弹出的菜单第一项 new 的位置会弹出下一级菜单，第一项 Project 就是创建项目，点击 Project 会弹出创建项目页面
    
    * 没有打开任何项目的记录或上一次点击了 Close Project 关了项目 重新打开 idea，页面如下
    
    ![创建项目 idea](./img/idea-project_002.jpg)
    
    在上面的窗口中点击 Create New Project 就会弹出创建项目页面

* 创建页中选择构建工具，开发使用的语言基础配置

    ![创建项目 idea](./img/idea-project_003.jpg)
    
    在创建页面选择 Gradle 构建工具，右侧上方，选择需要使用的 SDK，这里使用的是 Java 1.8 ，看自己的需求选择使用的 SDK，Frameworks 层选择 kotlin 这里没有什么争议的看自己使用的语言，使用Java 可以勾选 Java 或者勾选多个都是可以的，然后点击 next 下一步，进行下一页面操作
    
* 项目信息页，填写项目名称，域名也就是包名

    ![创建项目 idea](./img/idea-project_004.jpg)
    
    * Name 填写项目名称，格局项目的职责命名，这个没有要求，随意即可。
    * Location 新建的项目存放地址，根据自己的项目存放磁盘选择自己的项目路径。
    * GroupId 组id，也就是上面我们提到的域名或包名，例子中填写的 com.persagy.server。

 上面的三条是新建项目必须确认的，其他的不用考虑，点击 Finish 完成项目创建，如下图：
 
 ![创建项目 idea](./img/idea-project_005.jpg)
 
### build.gradle 整体项目的构建文件
 build.gradle 是项目的构建文件，里面有阿里的镜像地址，kotlin 构建地址，内部框架支持库地址设置，请点击查看代码
 
 ::: details 查看代码
 <<< @/docs/setup/dev/src/project/build.gradle
 :::
 
## 添加 Module 模块
上面我们完成了新项目的创建，但只是创建了一个基础的项目的壳在 IDEA 中项目可以集中管理，创建一个项目主项目，把其他的项目创建为主项目的 Module 模块，虽然添加多少个模块没有限制，还是要让我们视觉能过得去，添加多少看自己
我们会把业务相关的模块统一放在一个项目中管理，如果你的项目不多，也不用例会业务是否相关只是为了方便，可能有人问我每个项目都单独管理不行吗？，可以的看个人习惯，也看公司或团队开发规范，视情况而定，可能项目多了会比较麻烦，查看多个项目需要打开多个 idea ，下面我们开始添加 Module 模块之旅吧。

![创建项目 idea](./img/idea-module_001.jpg)

在右侧选择项目文件夹，然后点击右键弹出菜单，鼠标移动至 new 的位置会弹出下一级菜单，第一项 Module... 点击它就开始了我们添加 Module 模块之旅了

![创建项目 idea](./img/idea-module_003.jpg)

这里和创建项目的时候是一样的，选择构建工具，右侧上方选择 SDK ，这里我选择的是 java 1.8，然后选择 Kotlin/Jvm 因为我们团队使用的kotlin，这里根据自己的需求来选择，然后点击 next 进行下一步，会切换到下一级页面

![创建项目 idea](./img/idea-module_004.jpg)

图中的需要根据具体的要求填写一些相关信息，和创建项目时候也是类似的

        * Parent 这里指向的是父级别的项目， 选择了我们创建的 datacenter，根据自己创建的项目来选择，如果你创建的项目名和我的是不一样的，这里有非要和我选择一样的，你是找不到的，注意哦。
        * Name Module 模块的名字，这个没有什么争议，根据自己的需求来定义，我填写的是 data-center。
        * Location 和创建项目是一样的显示的是 Module 模块的位置信息，可以自己的路径来选择。
        * GroupId 组id，同创建项目一样，域名或包名，例子中填写的 com.persagy.server。
        
上面的几个条件我们确认完就可以点击Finish 完成 Module 模块的创建，这里只是创建完了 Module 设置参考”关键文件说明“的 settings.gradle 创建完的项目结构如下 。

![创建项目 idea](./img/idea-module_005.jpg)

### settings.gradle 项目设置文件
在添加 Module 模块中有提到配置 settings.gradle ，因为创建完的 Module 项目并没有识别到需要在下面的文件中添加 Module 配置，有多少个 Module 就应该写多少条配置，这样 Module 才能被项目识别到，正常的加载运行

::: details 查看代码
<<< @/docs/setup/dev/src/project/settings.gradle
:::

### 添加 Module 模块的项目结构

上面我们只是完成了 Module 模块的创建，从结构中可以看出还缺少相应的代码包路径，基本的配置，这里以 Spring boot 项目为例，因为我们使用的 Spring boot，所以... 跟着我的脚步一起来吧。
添加代码包路径，也是创建项目或 Module 都有提到了域名，示例中使用的包名为 com.persagy.server，鼠标左键选择 kotlin ，因为我们使用的是 kotlin 开发。    

![创建项目 idea](./img/idea-package_001.jpg)

接着上面，点击鼠标右键，在弹出的菜单中把鼠标移到第一项 new 的位置或弹出下一级菜单，然后点击 PackAge 会弹出一个输入框，在里面输入包名 com.persagy.server ，别光顾着看我的，输入你自己的包域名，回车包域名设置完成。
  
![创建项目 idea](./img/idea-package_003.jpg)
  
![创建项目 idea](./img/idea-package_002.jpg)

在包路径下先建立几个包，例如：实例类包（entities）、控制类包（controllers）、服务类包（services）

![创建项目 idea](./img/idea-package_004.jpg)

右键直接点击 com.persagy.server，弹出菜单把鼠标移动到第一项 new 后会弹出下一级菜单，点击 PackAge 建立下面的包，注意，如果下面还少吗都没有建，最好建一个空的文件再继续创建包，要不包名会链接重叠

![创建项目 idea](./img/idea-package_005.jpg)

现在可以创建实体类了，controllers 和 services 还不能操作，因为我们还没有集成 spring boot，集成部分查看下面的“添加支持库模块”。

### 添加支持库模块
首相我们来分析一下为什么要添加支持库，目前 data-center 模块中 只有基本的 java JDK 的支持，我们想要使用 spring boot 框架，数据库管理框架，都需要通过构建工具把他们添加到 data-denter 模块中，以及一些辅助的依赖包，由于我们使用的是  gradle ，需要把相关的引用添加到 data-denter 下的 build.gradle  文件中

::: details 查看代码
<<< @/docs/setup/dev/src/project/build1.gradle
:::

::: warning 注意 
每个依赖都有版本号，对应的版本号在 gradle.properties 属性配置文件中，请参考 gradle.properties，添加类对应的包引用，有可能下载不下来，毕竟是有限制的，参考 build.gradle 整体项目的构建文件添加了阿里的镜像已经公司内部的数据库底层框架地址。
:::

### gradle.properties 属性配置文件
这个文件中记录了项目中引用的所有的依赖的版本号，集中管理方便修改的时候或者查询的时候直接定位到当前使用的依赖的版本号，可以对应写详细的备注说明
::: details 查看代码
<<< @/docs/setup/dev/src/project/gradle.properties
:::

### 添加程序入口
一个程序的运行，一定会有一个程序的入口来启动程序，然后执行后续的动作，spring boot 项目一定有一个 main 函数入口，自定义一个类 DataCenterApp 继承自 SpringBootServletInitializer，原因是我们使用的是外部 tomcat 来运行程序，重新 configure() 函数，类的外部要把 main 函数入口添加添加上

![创建项目 idea](./img/idea-module_006.jpg)

::: details 查看代码
<<< @/docs/setup/dev/src/project/DataCenterApp.kts
:::
代码中已经很详细了，对 spring boot 不是很了解的童鞋可以找相关的文章脑补一下，这里不做详细的介绍了，只是简单的集成运行起来一个项目。

### WebMvcConfigurerAdapter 
![创建项目 idea](./img/idea-module_007.jpg)

* WebMvcConfigurerAdapter是什么
  Spring内部的一种配置方式
  采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制

* WebMvcConfigurerAdapter常用的方法
```metadata json

/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;

/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);

/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);

/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);

/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);

/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);

/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
```

具体的怎么使用，不做过多的说明了，参考相关文档。这里只是简单写了，里面的拦截器，让我们的代码运行即可。

::: details 查看代码
<<< @/docs/setup/dev/src/project/WebMvcConfg.kt
:::

### yml 文件配置
完成上面的操作还不能正常项目或 module 模块，需要配置 yml 数据库驱动，以及其他的配置，看需求你的项目需要配置什么，yml 里面使用的三方依赖都是在“添加支持库模块” 中添加的操作 yml 一定要确定相关的依赖已经添加，没有添加的可以查看下面的“添加支持库模块”。

![创建项目 idea](./img/idea-module_008.jpg)

在 resources 文件夹下创建 yml 文件，从上图中会发现我创建了两个， 一个 application.yml 一个 application-dev.yml，创建多个的的目的是要把共有的属性配置放在 application.yml 文件中，个别的配置放在了 application-dev.yml
来个栗子吧，我们有开发环境就会用生产环境，我们不能保证开发环境和生产环境使用的而一定是一套服务器环境，如果你的环境没有区分可以不用考虑，因为在我的需求中还需要针对不同的客户单独部署，客户方的私有环境，所以我一定要区分开配置
，生产环境 application-prod.yml，如果需要部署某个集团或公司的私有环境把 prod 修改为他们的标识或名称就可以了。

* application.yml 公共属性
::: details 查看代码
<<< @/docs/setup/dev/src/project/application.yml
:::

* application-dev.yml 开发环境属性
::: details 查看代码
<<< @/docs/setup/dev/src/project/application-dev.yml
:::


## 关键文件说明
### git 忽略文件
::: details 查看代码
<<< @/docs/setup/dev/src/project/gitignore
:::

::: warning 注意 
根据上面的配置、设置、添加依赖库就完成了项目的配置，项目可以正常运行了，运行时可能会遇到一个问题 Error running ‘App’: Command line is too long. Shorten command line for App
:::

### 解决问题
* 运行项目时会遇到 Error running ‘App’: Command line is too long. Shorten command line for App

解决方案：修改项目目录下的 .idea\workspace.xml

![问题 idea](./img/idea-error_001.jpg)

打开 workspace.xml 文件，找到名称为 PropertiesComponent 标签： \<component name="PropertiesComponent"\>，在这个标签中添加一行标签说明 \<property name="dynamic.classpath" value="true" \/\>
添加完运行就可以了。

![问题 idea](./img/idea-error_002.jpg)






