目录

Eclipse问题汇总

Access restriction: The type ‘JPEGCodec’ is not API

导入项目时Eclipse报错如下:

1
Access restriction: The type 'JPEGCodec' is not API (restriction on required library 'C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar')

第一次遇到这种错误,百度了下,原来是因为Eclipse默认把访问受限的API设置成了Error级别,所以才会编译报错。

解决方法一(推荐)

直接将项目的JRE给remove掉,然后再重新将JRE添加到项目中,操作如下:

  1. 右键项目,选择Properties -> Java Build Path -> Libraries -> 选中JRE System Library [jdkxxxx] -> 选择Remove
  2. 接着选择Add Librariy...,重新加入JRE

解决方法二

修改Eclipse中关于访问受限的API的编译级别:

Window -> Preferences -> Java -> Compiler -> Errors/Warnings,选择Deprecated and restricted API,将其中的Forbidden reference(access rules)的级别选为Warning。

缺少servlet-api.jar包

在Eclipse中缺省servlet-api.jar包,由于servlet-api.jar以及jsp-api.jar这两个jar包含在Apache Tomcat中,所以提示这两个包缺省而出现错误的情况下,执行Build Path -> Configure Build path -> Libraries -> Add Library -> server Runtime就可以了。

怎么设置在启动时提示选择工作空间

  1. Window -> Preferences -> General -> Startup and Shutdown -> Workspaces
  2. 勾选`Prompt for workspace on startup

如何在新的工作空间使用原来的配置(编码、视图、快捷键、插件设置等)

Eclipse如果更换一个新的工作空间,需要重新设置视图、配置等一系列东西,算是想到麻烦的一件事情,其实我们完全可以将旧的工作空间里的配置拷贝到新的工作空间里,这样就可以省去重新配置的麻烦了~ 

具体操作如下:

${workspace(你电脑里原本的工作空间目录)}/.metadata/.plugins里有这样两个文件夹:org.eclipse.core.runtimeorg.eclipse.ui.workbench,将新的工作空间里的同名文件夹删了,再将这两个文件夹复制到新的工作空间就行了!

org.eclipse.core.runtime:保存着Eclipse的用户配置,包括视图、编码、各种插件的配置(window下的preference里边的插件配置)等

org.eclipse.ui.workbench:保持着ui上的配置,包括上方的快捷工具栏和下方的view窗口等

如果不知道自己正在使用的工作空间在哪个目录下,请点击Eclipse左上角的File→switch workspace→other,显示的就是当前工作空间的目录。另外,在这里有个copy setting,可以选择转换到新的工作空间时拷贝原本的配置,但这里拷贝的其实只是org.eclipse.ui.workbench,缺少了org.eclipse.core.runtime,所以这种方法会丢失部分配置。

另外不要没事就随便转换工作空间,Eclipse容易崩溃_(:3」∠)_

在接口的实现类里使用@Override注解报错

@Override注解用来检测子类对父类或接口的方法的重写是否正确,但有一次我在Eclipse里对接口的实现类里使用@Override注解却报错,不过在父类的子类里使用该注解却是正常的。

百度了下才知道原来这是jdk1.5时的一个bug,在1.6时已经被修复;那么问题来了,我使用的jdk是1.8,为什么会报这个错误?明明之前也在接口的实现类里用过该注解,却没问题。由于Eclipse经常抽风,我怀疑是Eclipse的问题,经过排查确实如此,该项目使用的jdk版本不知道为什么变成了jdk1.5,导致出现了注解报错的问题。

解决方法

右键该项目,选择Properties,将Java Compiler和Java Facets里的jdk版本从1.5改为更高的版本,再刷新下项目重新编译就没问题了。`

修改默认编码为utf-8

一共需要设置三个地方:

  1. Window -> Preferences -> General -> Content Type -> Text -> JSP,在 最下面设置为UTF-8
  2. Window -> Preferences -> General -> Workspace,将Text file encoding设置为UTF-8
  3. Window -> Preferences -> Web -> JSP Files,设置为ISO 10646/Unicode(UTF-8)

修改properties文件的编码

Eclipse的properties文件是默认ISO-8859-1编码的,如果在properties里输入中文会导致乱码,此时需要修改其编码为utf-8,具体步骤如下:

Window -> Preferences -> General -> Content Types -> Text,然后单击Java Properties Files,选定下方的*.properties(locked),接着将最下方的ISO-8859-1改为utf-8,然后点击旁边的 Update,最后点击OK。

如何修改web项目的web module version

有时候我们想改变web项目的web module version,比如说原本是2.4版本,我们想改成3.0版本,通过右键项目名 -> Properties -> Project Facets,选中Dynamic Web Module后边的版本,将2.4改成3.0

这时候会报错误:Cannot change version of project facet Dynamic Web Module to 3.0.

而且这时候改动web.xml的文件头从2.4改成3.0版本的文件头也会报错。

解决办法

  1. 这时候我们需要找到该项目的目录,进入.setting文件夹,打开org.eclipse.wst.common.project.facet.core.xml
  2. 我们可以发现在这个xml文件中,有这样一个标签:
1
<installed facet="jst.web" version="2.4"/>
  1. 将这里的version改成你想要的版本,比如改成3.0
  2. 保存该文件的改动,接着刷新Eclipse中的该项目(左键选中项目名,按F5刷新项目)
  3. 接着再去Properties -> Project Facets , 将Dynamic Web Module改为3.0;然后将web.xml的文件头改为对应3.0版本的文件头;此时会发现可以修改成功而不会报错。

Maven项目Update Project后jdk版本变成1.5

在Eclipse里对一个Maven项目进行Update Project(快捷键是 Alt+F5),原本jdk为1.8的项目忽然就变成了1.5,于是就报了一些错误。

这跟Maven默认的jdk版本有关系,Maven项目如果不指定编译的jdk版本,就会默认为jdk1.5。查了下项目的pom文件,里边并没有指定编译的jdk版本,而Maven的配置文件settings.xml里也没有指明jdk版本,所以当Update Project后,这个Maven项目就会自动变成jdk1.5了。

有两种解决方法,一种是针对某个Maven项目而言,直接在pom文件中指明jdk版本;一种是全局设置,为所有Maven项目指明jdk版本。

方法一:在pom文件中指明jdk版本

在项目的pom.xml中的build节点里使用maven的编译插件来指定jdk版本,项目中通常使用这种方法来指定,因为比较灵活,可以随意指定版本,修改保存后即可生效。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
            <encoding>UTF-8</encoding>
            <source>1.8</source>
            <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

方法二:修改settings.xml文件

找到Maven的安装路径,打开conf\settings.xml,找到profiles节点,在该节点下添加一个profile节点:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<profile>
    <id>jdk-1.8</id>
    <activation>
    <jdk>1.8</jdk>
    <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

使用这种方法的好处是所有Maven项目都会按照这里的jdk版本来编译,当然如果在pom文件里也指定了jdk版本,则以pom里的为准。这种全局修改的方法必须要重启Eclipse才有效果

个人建议就算是修改了全局配置,也要在每个Maven项目里指明jdk版本,这是种良好的规范,利于别人理解。

安装了jd-eclipse插件后依然无法反编译类文件

Eclipse在安装了jd-eclipse插件后依然无法反编译类文件,这个问题是因为没有修改默认的类文件查看器。需要修改默认的类文件查看器为jd-eclipse:

  1. Window -> Preference -> General -> Editors -> File Associations
  2. 选中*.class,将Class File Editor设置为默认(Default)
  3. 选中*.class without source,将Class File Editor设置为默认(Default);如果这一步操作只有Class File Viewer,则需要点击AddClass File Editor添加进来并设置为默认(Default)

新版本的jd-eclipse的类文件查看器名字可能叫做JD Class File Viewer(总之,Class File Viewer是Eclipse自带的类文件查看器,安装插件后会出现新的类文件查看器)

接着重启Eclipse后就可以正常地反编译类文件了,如果缺少上述的第三步操作,会有比较大的可能依然无法反编译类文件。

lombok的@Slf4j和@Data无效

使用lombok框架开发可以减少大量重复性的代码,大大提高开发效率,但是Eclipse本身并不支持lombok,会编译报错。除了项目要导入lombok依赖,还需要为Eclipse安装该lombok插件。

安装方法很简单,找到你导入的lombok的jar包,双击运行该jar包,会出现一个安装界面。或者右键jar包,选择打开方式,接着选择Java (TM) Platform SE binary,会出现安装界面。

在安装界面选择当前的Eclipse进程,或者点击左下角的Specify location...选择你要安装插件的Eclipse,接着点右下角的Install / Update,很快就安装完毕,点击Quit Installer

lombok的下载地址:https://projectlombok.org/downloads/lombok.jar

个人问题补充

当我安装好lombok之后,Eclipse虽然能够正常识别@Slf4j注解生成的log变量,但@Data注解依然无效。在使用到了pojo类的私有变量时,依然会提示说缺少setter/getter方法。折腾了好久,才发现原来是因为Eclipse自动给我的pojo类的私有变量加上final修饰符,导致setter/getter方法注入失败了。

把pojo类的私有变量前边的final去掉后,@Data终于生效了。之所以会自动给变量加上final修饰符,是因为我设置了Save Action,Eclipse会自动在我保存代码的时候自动在私有变量、局部变量前加上final修饰符,这个是公司制定的代码编程规范。

Eclipse无法找到MapStruct生成的mapper实现类

Eclipse本身不支持MapStruct,除了需要安装较新版本的m2e插件,还要另外安装插件m2e-apt,该插件可以在Eclipse的Market里搜到。

接着在pom文件里添加:

1
2
3
<properties>
        <m2e.apt.activation>jdt_apt</m2e.apt.activation>
</properties>

然后maven update一下项目,重新编译后会在target目录下出现两个文件目录,里面存放的是MapStruct的生成类。

如果这时候还没效果,要手动打开apt的功能。邮件项目,选择Properties -> Maven -> Annotation Processing -> 勾选Enable project specific settings -> 选择第一个选项Automatically config JDT APT -> Apply and Close

参考链接

注意
本文最后更新于 March 19, 2021,文中内容可能已过时,请谨慎使用。