需求
Web 工程的构建最开始是手动构建,但是手动构建略显麻烦,特别是比较复杂的工程。所以就有人编写了方便我们管理工程的构建工具,比如:Ant、Maven、Gradle、Gant。但是这些构建工具用久了之后忘记最初的手动构建是如何构建的,或者遇到没有使用构建工具的 Web 工程,特此记录一下。
准备工作
配置 JAVA 环境变量
下载并安装 IntelliJ IDEA
下载并解压 apache-tomcat
网上有很多教程,此处我就不再赘述了。
开始
1. IntelliJ IDEA 与 Eclipse 的目录区别 ⇓
在 JAVA 开发工具中,还是有很大一部分人用的是 Eclipse,所以有必要说一下 IntelliJ IDEA 与 Eclipse 的目录区别:
- IntelliJ 系中的 Project 相当于 Eclipse 系中的 Workspace
- IntelliJ 系中的 Module 相当于 Eclipse 系中的 Project
- IntelliJ 系中的 Project 可以包含多个 Module
- Eclipse 系中的 Workspace 可以包含多个 Project
2. 配置 Project Structure
打开一个没有使用构建工具的 Web 工程
使用快捷键:Ctrl/Command+Shift+Alt+S;或者找到菜单:File
> Project Structure
,打开 Project Structure 配置面板。
我们可以看到 左边框
里有一些菜单项,我分别说一下他们可以配置些什么:
- Project Settings 项目配置
- Project:项目配置。通过前面提到的 “1. IntelliJ IDEA 与 Eclipse 的目录区别” 可以知道 Project 相当于工作空间,可以包含多个工程。所以我叫它
项目
,因为一个项目可能有多个工程。它可以配置:
a. 项目的名称
b. 项目使用的 SDK:软件开发包,如果是 JAVA 就是 JDK(JAVA 软件开发包)。
c. 项目使用的 SDK 版本限制:可以理解为特性选择,如果 JDK 版本是 1.8,但是这里选择 7,代表即使我配置的 JDK 版本是 1.8,在这个项目里面也只能使用版本 1.7 的特性,属于 1.8 特有方法或功能就不能使用。注意如果需要编译也只支持 1.7 的话,需要配置 IntelliJ IDEA 的编译器版本,快捷键 Ctrl+Alt+S 打开 Settings 面板,找到菜单Build,Execution,Deployment
>Compiler
>Java Compiler
,这里不再赘述。
d. 项目的编译输出目录:一般设置为项目根目录下的 out 目录。 - Modules:工程配置。这里配置的就是每一个单独的工程,它可以配置:
a. 增加或者去除工程:前面我说了,一个 Project 中可以有多个工程 module,当然也就可以增加或者去除工程,这里的去除不会删除本地工程。
b. 工程名字
c. 工程的 SDK 版本限制:如果 项目使用的 SDK 版本限制 配置之后,这里会默认使用,如果需要针对单个工程配置 SDK 的版本限制,就在此配置。
d. 标记目录类型:有些目录放的代码,有些目录放的测试代码,有些目录放的配置文件,有些目录放的测试配置文件,这些目录都需要标记类型之后,IntelliJ IDEA 才能区分出来。点击要标记的目录,再点击一次 Mark as 后面的标记类型,就标记成功了。现在的构建工具如 Maven 都是有固定的目录结构,开发工具识别了 pom.xml 文件后可以自动识别出目录的类型。
e. 配置工程根目录:可以配置工程的根目录,一般默认就可以了,如果没有就可以在这里配置。
f. 配置编译目录:这里有两个选项,第一个选项是使用默认输出目录,默认输出目录的规则是以 项目的编译输出目录 开始往后增加构造默认的目录结构。比如 项目的编译输出目录 配置的是D:\Learning\JenkinsTest\Demo\out
,此处默认的输出目录就是D:\Learning\JenkinsTest\Demo\out\production\Demo2
。production 是默认的编译文件夹,还有 test 我没在这写出来看下图,它是标记为 test 类型目录下的代码编译后的存放目录,Demo2 是工程名字。如果需要特定的目录,就选择第二个选项。
g. 配置工程 SDK:配置单个 Module 工程使用的 SDK,如果配置了 项目使用的 SDK,这里默认即可。
h. 配置工程依赖:配置工程依赖的 jar 包,一般不在这里配置。
- Libraries:点击
+
号添加项目依赖的 jar 包。不管是单个项目单个工程还是单个项目多个工程都在这里配置项目的依赖 jar 包,方便维护管理。当有多个工程的时候,添加依赖 jar 包时会让你选择加入到哪个 Module 工程,对应的 配置工程依赖 也会添加进去。如果同一个 jar 包需要加入到多个工程时,可以在添加依赖的时候同时选择多个 Module 工程,如果后续发现还有同一个项目下的其他工程需要用到这个依赖,可以点击右键选择Add to Modules
。
- Facets:这里可以理解为配置工程框架支持,比如:Web、Spring、Kotlin、JPA、EJB,选择了之后会让你选择对应的是哪个 Module 工程。有些框架选择之后会自动识别,有些需要一些简单的配置,比如这里我点击
+
号添加 Spring 会自动识别不用管;再添加 Web,需要如下配置:
a. 配置框架名字:默认即可。
b. Deployment Descriptors:配置 Web 工程的 web.xml 所在路径。点击+
号添加 web.xml 文件的路径,还可以选择 web.xml 文件的版本信息,如果没有特殊要求,版本信息默认即可。
c. Web Resource Directories:HTML 文件存放的根目录。
d. Source Roots:选择要包含在 Artifacts(工件)中的源根。这里需要前面标记了目录类型才会有,其中有一个小Bug,当你第一次进来发现没有标记目录类型,你标记之后这里也不会有,需要你点击OK
之后再次打开 Project Structure 才会出现。如果 Artifacts 配置中存在 ‘<ModuleName>’ compile output 元素,则所有源根的类都包含在相应的 Artifacts 中,而与在此处选择了哪些源根无关,可以默认或不勾选。关于 Source Roots 官网描述:
- If the ‘<ModuleName>’ compile output element is present in an artifact configuration, the classes for all the source roots are included in the corresponding artifact irrespective of which source roots are selected here.
- To include only the classes from the source roots selected on this page, use the following when configuring the artifact: + | JavaEE Facet Classes | Web (in <ModuleName>). As a result, the corresponding element in the artifact configuration will be shown as ‘<ModuleName>’ module: ‘Web’ facet classes.
当 Facets 配置好之后,你再点击 Modules 会看到添加工程的功能框里工程名前面有了一个可以打开扩展的图标,当你打开之后,会发现这里面的内容跟 Facets 中的内容一模一样,只是分类不同。Modules 是按工程分类;Facets 是按框架分类。你也可以在配置 Module 工程时就把对应的框架添加配置好。
5. Artifacts:配置 IntelliJ IDEA 如何打包每一个工程,即工件配置。有几种打包类型,这里介绍打 war 包,其他类型的打包不在这里赘述。点击 +
号选择 Web Application: Exploded
> From Modules
,选择你要打包的 Module 工程:
a. 打包的名字:生成 war 包的名字。
b. 打包的输出目录:没有特殊要求,默认即可。
c. Include in project build:是否包含项目构建信息,一般不勾选,默认即可。
d. Available Elements:可用元素,都是可以被打包的内容。一般通过 From Modules
生成之后只需要改一下打包的名字即可,有时还需要你手动添加依赖的 jar 包,添加方式找到你要添加的元素点击右键 Put into Output Root
,如果有特殊要求,例如打包的时候要加入其他工程也是一样的。如果需要加入可用元素中没有的内容,例如其他文件、目录、jar 包也可以在此功能框左边的框中点击 +
号选择你要添加的内容。
- Platform Settings 平台配置
- SDKs:配置全局 SDK 变量,无特殊要求默认即可。
- Global Libraries:配置全局依赖 jar 包,我一般不在这里配置,在 Libraries 中配置即可。
a. 与 Libraries 菜单的区别:在 Libraries 中配置的依赖可用于当前项目下的所有 Module 工程;Global Libraries 配置的依赖可用于所有项目,当我在这里添加了一个 jar 包后,打开其他的项目这里也会有这个 jar 包。
b. 如何使用:可以右键点击Add to Modules
添加到对应的 Module 工程;也可以右键点击Copy to Project Libraries
>OK
然后到 Libraries 中去添加到对应的 Module 工程。同样的在 Libraries 中也可以把对应的 jar 包移动到这里,右键点击Move to Global Libraries
。
Problems:IntelliJ IDEA 会自动侦测一些问题反馈到这个菜单里面。比如下图中有一个问题,描述的是 okhttp-3.10.0 这个 jar 包没有被使用。
3. 配置 Tomcat 容器
- 找到菜单
Run
>Edit Configurations
- 点击
+
>Tomcat Server
>Local
- 配置 Tomcat
- 点击
OK
后可以看到右上角多了一个汤姆猫,旁边有运行和 debug 运行,可以运行试试
到此,IntelliJ IDEA 手动构建 JAVA WEB 工程已经完成!