原文: https://blog.csdn.net/qq_27093465/article/details/86239039

简单介绍

在 intelliJ idea 里面看到 ,Project Structure——》 Libraries ——》 Sources 的路径是红色的

看图会比较好。以 guava 包为例来说明。

IDEA 中看到 classes, sources, javadocs 三种jar的区别和各自的作用 - 图1

可以看到在这看整个 maven 项目的依赖时,发现如图的情况,这红色是什么情况,是报错吗?需要处理吗?这 3 个不同 jar 都是什么东西,各自有啥作用。大概会有这么些疑问吧。?️。

假如在依赖库如上的情况下,你点进去,看 guava 的源码,会有下图的效果。

IDEA 中看到 classes, sources, javadocs 三种jar的区别和各自的作用 - 图2

给你 2 个选择,一个是选则 source,一个是下载 source。注意,这个时候,你看到的文件是 class 文件,是可以直接运行的文件,之所以能看到内部的具体实现,是 idea 给你自动逆转换啦。感谢 idea 吧

(记得当年刚刚工作的时候,使用的 eclipse,然后 debug 的时候,假如要进入这些个没有 sources 的 jar 的时候,就进不去这个 class 文件,他还傻乎乎的给个弹窗,让我倒入 sources 文件,还是 idea 高级,直接喊你下载。)

这个时候点击 download sources,下载源码。

IDEA 中看到 classes, sources, javadocs 三种jar的区别和各自的作用 - 图3

这个时候,你看到的文件,就变成啦 Java 文件,而且,还带上了很多的注释。

这个时候,再看仓库 library 的变化

IDEA 中看到 classes, sources, javadocs 三种jar的区别和各自的作用 - 图4

可以看到刚刚还是红色的 sources 文件,现在有啦,下面的 Javadoc 还没有。

然后,再看 mven 的 repository 里面的情况

IDEA 中看到 classes, sources, javadocs 三种jar的区别和各自的作用 - 图5

可以看到 jar 类型的文件 jar 包,这地方有 2 个。

(有么有疑惑,这个带 sources 的 jar 怎么比 classes 的 jar 还小呢?因为 Java 文件在编译生成 class 文件的时候,会对代码进行优化,这个优化是针对运行的,所以,由 Java 文件变 class 文件,他到底是变大,还是变小,这个是不确定。)

三个 jar 包同时存在的也不是没有,看下面

IDEA 中看到 classes, sources, javadocs 三种jar的区别和各自的作用 - 图6

最后,说一下,各自的作用。

各自作用

classes 的 jar,是正儿八经运行项目的时候使用的,因为这个是直接编译好的 class 文件,可以直接被虚拟机运行的。

sources 的 jar,就是给开发人员看的,自己在学习和 debug 的时候,可以看到 jar 包里面的各种注释说明,方便学习。

Javadoc 的 jar,也和 sources 的 jar 一个道理吧,起到辅助的作用吧。这个不是必须的,guava 就没有提示你下载这个,就已经显示了很多的注释了。

所以,

最开始的那个图里面的只要 classes 的 jar 不报错,下面的 2 个 jar,可有可无。不是什么问题。