- 作者: 韩勇
- 日期: 2018-12-02
前言
大学学习 Java 时开始接触 Eclipse,喜欢其强大和方便,并立志成为一名 Java 开发。然而近几年 Eclipse 的流行度开始下滑,一方面有 Eclipse 自身的不足(安装插件需要科学上网,新版卡顿、报错),一方面我在想是不是 Eclipse 更适合我这样熟练使用 Eclipse 的用户,而不是普通 Java 开发。我觉得我应该写一些教程,帮助大家了解和使用 Eclipse,作为对 Eclipse 社区的回馈。
安装 Eclipse
首先需要安装 JDK,Linux(或 Cygwin)下可使用 sdkman 安装(需要科学上网)。
sdk install java 8.0.191-oracle
下载解压 Eclipse Java 开发软件包,可从国内镜像加速下载,如 USTC eclipse 镜像 。Eclipse 当前最新发布版为 2018-09 (4.9),个人试用感觉不成熟稳定(不知道是不是 Linux GTK 版的问题),还是推荐安装 Oxygen (4.7) 版本。解压后文件夹名默认为 eclipse
,个人习惯修改为具体软件包名,如 eclipse-java-oxygen-3a
。
curl -O http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/oxygen/3a/eclipse-java-oxygen-3a-linux-gtk-x86_64.tar.gz
tar xf eclipse-java-oxygen-3a-linux-gtk-x86_64.tar.gz
mv -T eclipse eclipse-java-oxygen-3a
进入解压后的目录,建议对 eclipse.ini
进行简单配置修改:
-vmargs
前添加-vm
设置 jdk bin 路径。-Xms
,-Xmx
参数修改为1024m
。- 当前 Eclipse 版本在 Linux 下指定使用 GTK 2 更稳定友好。
Linux 下可使用如下命令快速完成配置,完整配置说明参考 Eclipse 运行时参数文档 。
( vm=$'-vm\\\n'"$(readlink -f "${JAVA_HOME}")/bin/" && sed -e '/^-vmargs$/ i '"${vm}" -e '/^-vm$/,+1 d' eclipse.ini -i )
sed -r -e 's#^(-Xms|-Xmx)[0-9].*$#\11024m#g' eclipse.ini -i
sed -r -e $'/^--launcher.appendVmargs/ i --launcher.GTK_version\\\n2' -e '/^--launcher.GTK_version/,+1 d' eclipse.ini -i
最后执行解压目录下的 eclipse
即可启动。
3 分钟理清 Maven 依赖
新建或导入 Maven 项目
Eclipse 完美支持 Maven,可直接新建或导入 Maven 项目(不要使用 mvn eclipse:eclipse
,那玩意儿早就过时了)。Maven 依赖很多时常常让人头疼,使用 Eclipse 可以快速、清晰、方便的查看和管理 Maven 依赖。
假设一个项目同时依赖了 async-http-client
和 grpc-netty
。使用 Eclipse 新建一个 "Maven Project",向导界面勾选 "Create a simple project(skip archetype selection)" ,"Group Id" 和 "Artifact Id" 输入 hello
。编辑 pom.xml
文件内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<groupId>hello</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
</project>
保存 pom 文件,Eclipse 自动开始解析并下载缺失依赖,完成后按 "Alt+F5" 快捷键更新 Maven 项目配置。
查看 Maven 依赖树
切换到 "Dependency Hierarchy" 标签页,即可看到 Maven 依赖视图如下。左边是依赖树,右边是解析之后的依赖列表。
分析特定 Maven 依赖
依赖太多看的眼花,假如我们要排查某个具体库的依赖情况,如 slf4j-api
,只需在右上角 "Filter" 输入 slf4j
模糊匹配,即可只显示相关库的依赖路径,如下图所示。
一下子清晰了很多,左边可看到 slf4j-api
在 async-http-client
的依赖树上被间接依赖了两次。
- 一次提示
(omitted for conflict with 1.7.25)
,表示依赖路径过深,与更短依赖路径上的版本1.7.25
冲突(虽然当前版本也是1.7.25
)被排除掉。 - 另一次出现在最短的依赖路径,作为最终依赖保留,依赖 scope 是
compile
。 - 右边依赖列表突出显示最终依赖版本为
slf4j-api:1.7.25[compile]
。
清空 "Filter" 过滤条件,直接在右边依赖列表中点击一个依赖,即可查看其依赖解析情况。如点击查看 netty-handler
依赖详情如下。
- 可看到
netty-handler
最短依赖路径是第一处被async-http-client
依赖,其中(managed from 4.1.30.Final)
表示async-http-client
原本依赖的是4.1.30.Final
版本,但因为当前项目配置了依赖版本管理(即dependencyManagement
),被管理为4.1.31.Final
。 - 依赖版本管理直接指定了最终依赖版本,依赖树上的所有
netty-handler
都被管理为此版本。
显示 Maven groupId
为简单起见,依赖视图默认只显示 artifactId ,如果要查看 groupId ,可点击 "Show GroupId" 按钮切换显示 groupId。显示 groupId 可排查不同 groupId 同名 artifactId 的情况。
查看和定位管理的依赖版本
如果在 pom 文件中依赖一个被管理的依赖,鼠标放上去即可看到被管理的依赖版本号,还可以点击跳转到定义此依赖管理的地方。
查看最终生效的 Maven 配置
本项目中并没有直接定义依赖管理,而是从 parent 继承的。除了依赖管理,Maven 还会继承合并属性配置,插件配置等配置。点击 "Effective POM" 标签页,可查看当前项目继承合并所有配置后,最终生效的配置。
可看到本项目继承设置了 Java 编译版本为 1.8
,还可看到其他所有属性定义,依赖版本,插件配置等配置。
Eclipse 对 Maven 进行了非常好的集成支持,还有其他许多功能,可以在实际使用中发现和体验。
友好排版请 阅读原文 。