[工具篇]-Eclipse转IDEA
[工具篇]-Eclipse转IDEA
针对已有的eclipse项目转化为idea项目,此处列举一些常见的项目转化参考以及问题说明
概述
如果针对一些比较重要的项目,在不改动原有项目结构和配置的基础上,可以在idea中通过File->new Project from existing sources的方式导入项目源,这种方式保留了项目原有的配置,只需要根据提示选择项目属性一步步next指定即可,不可或缺的是还需在此基础上配置idea相关的内容。
如果针对纯粹的”代码迁移”的场景,只考虑切换工作空间或者开发工具,则只需要将核心的源码进行迁移,随后根据idea工具应用配置相关内容即可,以一个最简单的eclipse项目而言,其核心源码则主要为src下的内容,因此针对普通的Java工程迁移最简单的迁移思路可以有两种:
方式1:新建工程并配置,直接将源码进行替换(此处需考虑项目编码问题,避免源码替换时出现中文乱码)
方式2:直接通过idea:File->Open,打开指定工程目录(类似项目导入,软件会自动生成.idea文件夹、.iml配置文件),随后配置项目依赖环境
1.普通项目
【1】项目概况
针对一个普通的Java项目,其主要核心源码集中于src目录,此外可能还关联第三方jar或者其他资源文件。以一个简单的基于eclipse构建的Java工程为例,其目录结构参考如下
.settings # eclipse配置文件
bin # 项目编译后的生成文件目录(.class)
src # 项目源码文件
.classpath #
.project #
【2】迁移参考
基于上述内容,如果在不考虑eclipse配置保留的情况下可以直接删除除src源码文件以外的所有内容,随后通过File->Open打开项目工程,此时idea会自动生成相关的初始化配置文件(.idea、.iml),此时的文件结构目录为
.idea # idea配置文件
src # 项目源码文件
.iml #
打开工程后则进一步配置项目依赖环境:File->Project Structure->Project模块,配置项目基本环境
File->Project Structure->Libraries模块(此模块是针对第三方jar引入相关的配置),如果存在第三方依赖需引入则可在项目目录下创建libs文件夹存放所需的jar,随后在Libraries模块
中将整个libs文件目录引入。
或者可以直接右键libs文件目录选择”Add As Library”选项将其作为项目依赖引入
配置完成,则可启动工程进行验证。这个过程最重要的是验证项目是否能够正常运行、功能的正确性和完整性,以及是否存在隐藏的配置问题,如果项目正常编译执行,则相应会在目标目录中生成out文件夹存放编译后的文件内容,最终完整的项目目录结构为
.idea # idea配置文件
src # 项目源码文件
out # 项目编译后的生成文件目录(.class)
.iml #
2.Web项目
【1】项目概况
针对一个普通的JavaWeb项目,其主要核心源码集中于src源码目录、WebContent(web)资源目录,此外可能还关联第三方jar或者其他资源文件。以一个简单的基于eclipse构建的JavaWeb工程为例,其目录结构参考如下
.settings # eclipse配置文件
build # 项目编译后的生成文件目录(.class)
src # 项目源码文件
WebContent # web资源目录(包括要发布的静态资源文件以及WEB-INF、META-INF相关目录)
.classpath #
.project #
项目运行环境:tomcat
【2】迁移参考
🔖迁移过程
基于上述内容,如果在不考虑eclipse配置保留的情况下可以直接删除除【src源码文件、WebContent(web)资源目录】以外的所有内容,随后通过File->Open打开项目工程,此时idea会自动生成相关的初始化配置文件(.idea、.iml),此时的文件结构目录为
.idea # idea配置文件
src # 项目源码文件
WebContent # web资源目录(包括要发布的静态资源文件以及WEB-INF、META-INF相关目录)
.iml #
打开工程后则进一步配置项目依赖环境:File->Project Structure->Project模块,配置项目基本环境
File->Project Structure->Modules模块,配置相关依赖(如果工程中还参与eclipse相关依赖可直接清理,通过自定义依赖库的形式引入所需的依赖内容)
File->Project Structure->Libraries模块,配置工程所需的外部依赖,配置步骤和普通工程配置一致
File->Project Structure->Facets模块,添加Web配置,点击Ok确认之后会跳转到Modules模块配置,可以看到模块配置下有一个新增的Web选项
idea生成的内容默认指定的资源文件夹是【web目录】,如果不存在或者不小心清理了内容,可通过点击对应选项的”+”添加配置,将内容指定到自定义的路径
File->Project Structure->Artifacts模块,选择Web Application:Exploded->From Modules,选择对应的模块
配置项目运行环境tomcat:
配置发布内容:Deployment选项卡
Application context配置:/
表示应用访问目录为:https://localhost:8080(省略项目名称)、/JavaWeb
表示应用访问目录为:https://localhost:8080/JavaWeb(指定应用名称)
配置完成,启动tomcat进行验证,如果过程中出现问题则一一进行排查(查看tomcat选项卡,关注tomcat运行日志文件,一一排查)
📌常见问题
1>out\artifacts\xxx_war_exploded not found for the web module
检查目标生成目录下是否正常生成相关的内容,检查文件的完整性
如果没有对应的模块内容,则检查File->Project Structure->Artifacts模块中发布内容是否正常配置,如果没有找到要发布的模块则确认Facets中的web.xml以及资源目录路径是否指定正确,随后重新移除、装载发布的包
【3】模块概念
类似eclipse多模块工程构建概念,此处idea中则是通过Modules管理多模块,假设一个多模块工程有xx-parent、xx-core、xx-utils、xx-module这几个工程构成,则可创建一个文件夹xx统一存放工程内容,随后在该文件夹下管理各个子模块的内容,还可通过New Module创建新的子模块(子工程),而上述所说的模块和发布内容的对照也是基于多模块构建的思路(针对单体项目:一个工程可能就只有一个模块,针对多模块工程构建:一个工程下有多个子工程)
对照eclipse:可以理解为一个Empty Project即对应eclipse的workspace(工作空间),在这个Empty Project下可以引入多个子工程(项目或者模块概念),而File->Project Structure配置则是针对这个工作空间的配置
🔖参考示例
(1)创建Empty Project
创建Empty Project,指定工程名称,创建完成生成的是一个包含.idea
配置文件的空目录
(2)引入子模块(子工程)
1)项目导入
可选择导入eclipse工程,指定工程路径(其余配置选择默认即可,选择默认则是以当前project配置为参考进行初始化),导入完成会保留eclipse相关配置(此处需要注意的是,如果需要以eclipse的方式导入可保留其原有的配置,让idea识别它是一个eclipse工程;或者直接在源码基础上创建模块),建议直接通过借助源码构建module的方式导入,下述演示以基于eclipse配置导入(注意项目的.iml文件存储路径)
此时将这个module按照普通的web项目进行配置即可(移除eclipse相关依赖和配置,引入idea的SDK、Tomcat、版本发布等配置),清理后的module配置参考如下(主要关注SDK版本、源码和资源文件),以此类推可依次引入子工程到相应的工作空间
2)Libraies配置
随后相应配置Libraies(这是项目级别的依赖管理,在此处配置的libs可选择是否关联到子工程),此处引入servlet-api.jar(可在project目录下创建一个公共的文件libs存放公共的依赖,随后将与module进行关联)
不同的子工程的依赖管理需要在module中查看依赖,如果在上述导入操作的时候没有选择关联到指定的modules,则可在相应的modules配置中进行补救,此处module关联的依赖可以有三种配置方式:
结合案例说明,因为Web项目中需要引入servlet-api.jar(需确保版本正确性,保持和tomcat同步),这个jar可由tomcat的依赖库提供,因此此处配置有两种思路引入(选择Library方式):
- 方式1(通用):是在libs中将其作为公共的jar引入,供多个模块共用;
- 方式2(针对部分jar):直接将依赖指向第三方应用服务,由其提供相关内容
针对一些非公共的jar引用,可以通过”JARs or Directories”方式引入自身项目所需要关联的依赖,引入效果参考如下所示
3)Facets配置
Facets配置:当引入了多个module,在配置Facets的时候则可选择为指定的module构建配置,基于这种方式构建会默认将web.xml和资源文件指定为工程下的web目录(一些项目工程可能将资源文件夹定义为WebContent,需要相应做调整)
PS:除却上述方式,还可直接在Modules模块中右键选择指定模块添加Web配置,效果和上述操作一致
以JavaWeb_Ajax为例,选择JavaWeb_Ajax配置:随后配置web.xml和资源文件路径,以此类推相应配置其他几个项目的web配置,在后续操作中借助tomcat发布查看效果
4)Artifacts配置
5)Run/Debug Configuration:tomcat配置
Server基本配置参考常规Web工程的配置,此处需关注Deployment部分,选择要发布的Artifacts
添加完成则点击确认,随后启动tomcat进行测试(这种形式类似于eclipse中的Server管理,在一个tomcat中引入多个工程),但此处需要注意的是在同一个tomcat中启动多个工程,需要关注tomcat的启动日志,如果出现异常需要相应排查工程启动问题或者tomcat校验问题。
根据上述配置,如果tomcat启动成功,则可根据相应的应用路径访问即可(eg:localhost:8080/JavaWeb_Ajax_war_exploded)
tomcat的加载目录:上述项目是部署在tomcat上的内容,而其各自编译的目录则为tomcat的加载路径,因此在排查一些资源缺失的问题时,可以关注对应的路径查看发布资源是否正常装配
3.基于Maven构建的Web项目
【1】项目概况
针对一个maven构建的JavaWeb项目,其主要核心源码集中于src目录和pom.xml配置文件,此外可能还关联第三方jar或者其他资源文件。以一个简单的基于maven构建的Java工程为例,其目录结构参考如下
.settings # eclipse配置文件
target # 项目编译后的生成文件目录(.class)
src # 项目源码文件
.classpath #
.project #
pom.xml # maven核心配置文件
【2】迁移参考
基于上述内容,保留项目核心源码src和pom.xml,可参考简单项目的导入方式直接导入。导入完成配置maven环境,其余项目依赖环境可参考普通Web项目配置
maven环境配置:File->Setting->Maven
配置maven安装目录和setting文件,点击apply项目自动加载配置随后引入依赖(如果本地依赖库没有找到指定版本的依赖,则会根据maven指向的配置到相应的依赖库中下载内容到本地依赖库中)
在Maven选项卡中可以查看项目的依赖加载情况,如果出现飘红则相应检查是否出现依赖下载失败或者依赖冲突的问题,一一进行排查