拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IntelliJ IDEA 中搭建 Eclipse Java Web 项目环境:从 .project 导入到 Tomcat 运行部署全流程

IntelliJ IDEA 中搭建 Eclipse Java Web 项目环境:从 .project 导入到 Tomcat 运行部署全流程
  • 文档
  • 教程

【免费下载链接】IntelliJ-IDEA-Tutorial

IntelliJ IDEA 简体中文专题教程

项目地址:https://gitcode.com/gh_mirrors/in/IntelliJ-IDEA-Tutorial
点击查看免费下载

本篇文章是 IntelliJ IDEA 简体中文专题教程中关于 Eclipse Java Web 项目迁移的实战指南,完整覆盖从 Eclipse 项目(以开源论坛项目 JspRun 为例)直接打开、目录标注、依赖包管理、Facets/Artifacts 配置,到 Tomcat 启动、热更新、停止与 war 包输出的全流程。读完本文,你可以不借助任何导入向导,直接在 IntelliJ IDEA 中打开并运行一个传统的 Eclipse Java Web 项目,并理解Sources、Excluded、Facts、Artifacts、On Update action等 IntelliJ IDEA 特有概念的底层含义。

Eclipse 用户迁移前的概念准备:Workspace / Project / Module 对照

很多从 Eclipse 迁移过来的开发者,第一反应是"在同一个窗口里管理多个项目"。但 IntelliJ IDEA 没有 Eclipse 工作空间(Workspace)的概念,它的组织模型是:一个 Project 打开一个 Window 窗口,Project 是最高层级,其次才是 Module。

  • Eclipse 的workspace类似 IntelliJ IDEA 的Project(但不应照搬理解);
  • Eclipse 的project对应 IntelliJ IDEA 的Module;
  • Eclipse 的.project文件对应 IntelliJ IDEA 的.iml模块配置文件;
  • IntelliJ IDEA 的项目级配置保存在.idea目录中,项目与模块的配置变动都以 XML 文件方式体现,详见仓库中的项目相关概念与 Hello World 项目创建与项目配置文件介绍。

正因为 Module 是可独立编译、运行、测试和调试的最小功能单元,传统的单 Module Eclipse 项目在 IntelliJ IDEA 中通常只对应一个 Module,这也决定了本文后面所有配置都在"单 Module"前提下展开。

认识典型 Eclipse Java Web 项目结构(以 JspRun 为例)

在 Eclipse 下,中小型 Java Web 项目的目录结构基本都是固定的模式:顶层有src源码目录,输出根目录为WebRoot(或webapp),其下有WEB-INF目录,WEB-INF内部通常包含classes(编译输出)和lib(依赖包)两个关键子目录。本文以一个开源论坛项目 JspRun 作为演示对象,其典型结构如下:

从上图可以看出几个关键角色:

  • src:可编译的源代码目录;
  • WebRoot:整个项目的 Web 输出根目录,是容器(Tomcat)部署时访问的根;
  • WEB-INF:存放web.xml等核心配置文件;
  • WEB-INF/classes:编译后的 class 文件输出目录;
  • WEB-INF/lib:项目依赖的 jar 包目录。

后续所有配置步骤,都是围绕让 IntelliJ IDEA 正确识别以上这些角色的职责来展开的。

直接打开 Eclipse 项目:选择 .project 文件

IntelliJ IDEA 对 Eclipse 项目支持非常友好——支持直接打开 Eclipse 项目,无需任何导入操作。做法是:在 IntelliJ IDEA 中通过打开文件的方式,直接选中 Eclipse 项目根目录下的.project文件即可完成项目打开。

打开后 IntelliJ IDEA 会自动识别项目结构,从源码结构看,它完成了三类关键识别:

  1. src目录自动识别为可编译源码目录:文件夹图标会变成蓝色(Source root 标识),见下图标注 1;
  2. WebRoot被识别为项目输出根目录:Web 资源区域(标注 2)虽重要但无需手工配置;
  3. WEB-INF下的配置文件、classes与lib目录被识别:其中classes目录默认被标为红色(Excluded排除目录),因为编译产物对开发无意义,IntelliJ IDEA 不会为它建立索引,但这不影响容器运行时使用这些编译产物。

由于这是单 Module 项目,接下来需要把Project compiler output(项目编译输出目录)指定到项目WEB-INF下的classes编译目录,保证编译产物落到容器可加载的位置。

目录标注五大类型:Sources / Tests / Resources / Test Resources / Excluded

打开项目后,可以根据项目实际情况对任意目录进行五种类型的标注。操作方式是:选中要标注的目录,再点击右侧对应类型的标注按钮。这个知识点非常重要,是后续手动管理项目结构的基础。

五种类型的具体含义如下:

标注类型用途说明
Sources标注可编译的源码目录,类似src。只有 Sources 类型的目录才能新建 Java 类和包,这一点务必牢记。有时项目除了src还有其他目录需要可编译,也要标注为 Sources
Tests标注可编译的单元测试目录。在规范的 Maven 项目中,顶层src不会标为 Sources,而是将src/main/java标为 Sources、src/test/java标为 Tests
Resources标注资源文件目录。Maven 项目中的src/main/resources会标为此类型,资源目录下的文件会被编译/复制到输出目录
Test Resources标注单元测试的资源文件目录。对应 Maven 中的src/test/resources,同样会输出到编译目录
Excluded标注排除目录。被排除的目录不会被 IntelliJ IDEA 创建索引,相当于被废弃,其中的代码不具备代码检查和智能提示等常规功能

从这些类型的划分可以明显看出 IntelliJ IDEA 对 Maven 标准目录结构的深度支持——Tests、Resources、Test Resources三种类型基本就是为 Maven 规范结构量身设计的。对于非 Maven 的传统项目,一般只要设置好src一个目录即可,其余按需调整。

操作上的两个细节也值得注意:

  • 被标注的目录会在设置界面右侧有一个总览(概括列表),方便一眼看清整个 Module 的目录角色划分;
  • 上图中的classes目录虽然是Excluded,但由于它特殊且不可编辑,不会出现在右侧总览中;
  • 如果想取消某个目录的标注含义,点击标注按钮旁边的打叉(删除)按钮即可移除标注。

依赖包(Libraries)管理:五种操作与目录级引入

在项目设置中可以看到项目当前所有的依赖包列表,其中红色显示的依赖包表示 IntelliJ IDEA 无法识别(例如路径失效或格式不识别)。依赖包支持五种操作:

  • 加号:引入新的依赖包;
  • 减号:移除对应的依赖包;
  • 向上箭头:依赖包上移。列表越靠上的依赖包在项目加载时越优先,对于同一依赖包的不同版本,依赖顺序不同,最终生效结果也可能大不相同;
  • 向下箭头:依赖包下移,原因同上;
  • 笔:编辑依赖包的名称和路径。

引入依赖包时,IntelliJ IDEA 支持三种来源:单个jar包、一个目录、以及已经导入到项目Libraries中的依赖包;多 Module 项目还可以依赖其他 Module。

这里有一个非常实用的技巧:以目录为单位引入依赖,而不是逐个 jar 引入。除非各个依赖包之间存在严格的依赖顺序关系,否则不建议逐个引入(繁琐且难以维护)。推荐做法分两步:

  1. 先把项目中散落的零散依赖包全部移除;
  2. 把项目的lib目录作为一个整体依赖包,先放置到项目级Libraries中(Gif 演示见 images/xxi-b-eclipse-project-settings-8.gif);

这样做的最大好处是:以后项目需要新增 jar 时,只要把 jar 放进lib目录就会被自动引入,因为这里引用的是目录而不是一个个具体的 jar 包,无需每次手工添加。

Facets:管理框架配置文件的核心区

对于传统 Java Web 项目,还需要指定web.xml的位置,这一步通常在Facts(Facets)中进行配置。Facts可以理解为 IntelliJ IDEA 的"项目框架区",专门用于管理项目使用的框架及其配置文件,这是 IntelliJ IDEA 特有的配置点。

除了web.xml必须配置外,其他框架即使不在这里配置也不会影响项目运行,但会失去 IDE 的辅助功能。例如项目中一般都有 Spring 框架,Spring 有大量配置文件,如果在这里正确配置了 Spring Facet,IntelliJ IDEA 编辑区底部会多出几个 Spring 项目的专属设置区——因为你明确告知了 IDE 项目使用了 Spring,IDE 就会提供对应的配置与导航能力。Hibernate 等其他框架同理。

Artifacts:配置 war 展开输出结构

Artifacts同样是 IntelliJ IDEA 特有的概念,可以理解为配置项目最终输出结果的地方。Java Web 项目一般必备一个配置:把项目配置成 war 包展开(exploded)的方式输出,这样容器才能直接运行该项目。

关于 Artifacts 配置的几个要点:

  • Artifacts 的输出结构由前面 Module 等几项配置共同决定,如果 Module 配置没有大问题,这里可以省去不少步骤;
  • 有些时候仍需手工调整,例如本演示项目中默认生成的输出目录是错的,需要改为项目中的webRoot目录;
  • 该 Artifacts 配置在后续配置 Tomcat 的 Deployment 时会被引用,务必重点留意。

Tomcat 应用服务器配置:容器、VM 参数与更新事件

引入并选择容器

IntelliJ IDEA 支持目前市场上主流的应用容器(Tomcat、Jetty 等),基本一个 IDE 就能满足常见项目开发。但要注意:IntelliJ IDEA 支持这些容器,不等于自带这些容器的文件,容器本身仍需要你自行准备。本文演示中原本只引入了 Tomcat 7,为了演示又引入了 Tomcat 6——引入时只需指定容器存放目录,IntelliJ IDEA 会自动识别。

核心配置项逐项拆解

在 Tomcat 运行配置面板中(对应 images/xxi-c-eclipse-project-tomcat-settings-3.jpg),以下几个配置项是重点:

  1. 切换容器(标注 1):可以随时为项目切换不同的应用容器,例如在 Tomcat 6 与 Tomcat 7 之间切换;
  2. VM 参数(标注 2):可以为运行中的容器指定 JVM 参数,例如内存大小、JRebel 的-agentpath等;
  3. 更新事件(标注 3):这是 IntelliJ IDEA 特有的重点功能,包含两个事件:
    • On Update action(按 Ctrl + F10 更新时触发):当按下Ctrl + F10更新容器时,按此处配置的事件执行更新。最常用的是Update classes and resources,即把最新编译的类和资源文件更新到容器中。在 Debug 模式下,这个动作就是所谓的HotSwap(热交换),只是这种热部署体验不如 JRebel 插件(详见仓库中的 JRebel 热部署插件安装与使用);
    • On frame deactivation(切换到其他应用时触发):当从 IntelliJ IDEA 切换到浏览器时触发指定事件。这是因为 Web 开发需要频繁在 IDE 与浏览器之间切换测试,该功能帮你在切换时自动做更新;但切换过于频繁时非常耗资源,所以推荐设置为Do nothing(切换时什么都不做);
  4. HTTP 端口(标注 4):默认 Tomcat HTTP 端口是 8080,需要改端口时在这里设置;
  5. 启动前操作(标注 5):配置容器运行前要执行的动作,包括Make和Build Artifacts。其中Build Artifacts是在 Deployment 选项卡中添加了 Artifact 之后自动出现的。关于Make只编译修改过文件的增量编译机制,可参考仓库中的 IntelliJ IDEA 编译方式介绍。

项目运行准备:数据库与配置文件

通过上面的配置,IntelliJ IDEA 环境层面的配置已基本完成,接下来配置项目相关部分。

首先打开 MySQL,执行以下 SQL 脚本,创建一个新的数据库和用户:

CREATE DATABASE `jsprun` CHARACTER SET utf8; CREATE USER 'jsprun'@'localhost' IDENTIFIED BY 'jsprun'; GRANT ALL PRIVILEGES ON jsprun.* TO 'jsprun'@'localhost'; FLUSH PRIVILEGES;

然后切换到新建的jsprun数据库,执行项目自带的数据初始化脚本,文件位置为:JspRun\WebRoot\install\jsprun_zh_CN.sql。

最后修改JspRun\WebRoot\config.properties文件中的数据库连接属性为:

dbuser = jsprun dbpw = jsprun

引入 Tomcat 依赖包并启动项目

首次运行前,项目还缺少 Tomcat 的依赖包(如servlet-api.jar、jsp-api.jar等),需要先在 Module 依赖中把 Tomcat 库引入进来,否则运行时会报错(演示见 images/xxi-d-eclipse-project-tomcat-run-1.gif)。

引入之后即可启动项目,最终运行效果如下:

停止 Tomcat 的正确姿势

Tomcat 的停止按钮需要点击两次:第一次点击后出现一个骷髅头图标,此时并未真正停止,需要再点击一次才能完成停止。

即使点了两次,Tomcat 容器有时也不一定能完全停掉,这时非常容易出现端口被占用的问题。解决方法是:打开系统的资源管理器,手动结束系统上所有 java 相关进程(例如kill掉残留的 Java 进程),释放被占用的端口后重新启动。

输出 war 压缩包

除了在Artifacts中配置之外,还需要在 Tomcat 容器的 Deployment 中也跟着配置,这样在启动容器时才会输出一个 war 压缩包(演示见 images/xxi-e-eclipse-project-output-war-1.gif)。

通过这一配置过程也能理解 war 包的本质:war 压缩包本质上是根据展开的 war 输出包(exploded)压缩而来。所以只要 Artifacts 的展开结构配置正确,war 包内容就会与其一致,无需手工维护两份。

小结

把 Eclipse Java Web 项目迁移到 IntelliJ IDEA,核心路径可以概括为五步:直接打开.project文件 → 确认目录标注与编译输出目录 → 以目录方式引入lib依赖 → 配置 Facets 与 Artifacts → 配置 Tomcat 并运行。其中最容易忽略的两个点分别是:classes等Excluded目录不影响容器使用、以及依赖包顺序会影响同版本冲突时的生效结果。掌握这五步之后,无论是传统的 Eclipse Web 项目还是后续过渡到 Maven 结构项目(可参考仓库中的 Maven 结构项目搭建 与 Maven 单模块/多模块 Spring MVC + Spring + Mybatis 项目讲解),都能在 IntelliJ IDEA 中顺畅运行。

  • 文档
  • 教程

【免费下载链接】IntelliJ-IDEA-Tutorial

IntelliJ IDEA 简体中文专题教程

项目地址:https://gitcode.com/gh_mirrors/in/IntelliJ-IDEA-Tutorial
点击查看免费下载
上一篇:Obsidian-skills 测试指南:5 步搭建完整验证体系
下一篇:如何快速开发PDFMathTranslate批量翻译API:Python接口与HTTP服务设计完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表