Eclipse教程1 - 3分钟理清Maven依赖

  • 作者: 韩勇
  • 日期: 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-clientgrpc-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 依赖视图如下。左边是依赖树,右边是解析之后的依赖列表。

Eclipse教程1 - 3分钟理清Maven依赖Eclipse教程1 - 3分钟理清Maven依赖

分析特定 Maven 依赖

依赖太多看的眼花,假如我们要排查某个具体库的依赖情况,如 slf4j-api,只需在右上角 "Filter" 输入 slf4j 模糊匹配,即可只显示相关库的依赖路径,如下图所示。

Eclipse教程1 - 3分钟理清Maven依赖Eclipse教程1 - 3分钟理清Maven依赖

一下子清晰了很多,左边可看到 slf4j-apiasync-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 依赖详情如下。

Eclipse教程1 - 3分钟理清Maven依赖Eclipse教程1 - 3分钟理清Maven依赖

  • 可看到 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 的情况。

Eclipse教程1 - 3分钟理清Maven依赖Eclipse教程1 - 3分钟理清Maven依赖

查看和定位管理的依赖版本

如果在 pom 文件中依赖一个被管理的依赖,鼠标放上去即可看到被管理的依赖版本号,还可以点击跳转到定义此依赖管理的地方。

Eclipse教程1 - 3分钟理清Maven依赖Eclipse教程1 - 3分钟理清Maven依赖

查看最终生效的 Maven 配置

    本项目中并没有直接定义依赖管理,而是从 parent 继承的。除了依赖管理,Maven 还会继承合并属性配置,插件配置等配置。点击 "Effective POM" 标签页,可查看当前项目继承合并所有配置后,最终生效的配置。

Eclipse教程1 - 3分钟理清Maven依赖Eclipse教程1 - 3分钟理清Maven依赖

可看到本项目继承设置了 Java 编译版本为 1.8,还可看到其他所有属性定义,依赖版本,插件配置等配置。

Eclipse 对 Maven 进行了非常好的集成支持,还有其他许多功能,可以在实际使用中发现和体验。

友好排版请 阅读原文

上一篇:1024程序员解密游戏


下一篇:startActivityForResult()和onSaveInstanceState()用法