在JDK上运行Eclipse时显示的编译错误

时间:2018-07-09 13:37:03

标签: java eclipse

我刚刚发现Lombok,Spring-Tool-Suite出现了奇怪的行为,并且发现我正在使用JDK代替JRE运行STS。

这是我在STS.ini中的当前配置:

-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
-vm
C:\development\applications\Java\jdk-8\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM
-Xms40m
-Dosgi.module.lock.timeout=10
-Dorg.eclipse.swt.browser.IEVersion=10001
-Xmx1200m
-javaagent:C:\development\applications\sts-3.9.5.RELEASE\lombok.jar

在IDE中,出现错误The method […] is undefined for the type […]

The method … is undefined for the type …

但是,IDE似乎知道该方法确实存在……

The method does exist

我们可以看到,Lombok已正确安装在STS中。

enter image description here

但是,如果我在JRE中使用以下配置,则不会再出现lombok错误,而是POM中的一个问题,要求我使用JDK启动IDE:

-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
-vm
C:\development\applications\Java\jre-8\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM
-Xms40m
-Dosgi.module.lock.timeout=10
-Dorg.eclipse.swt.browser.IEVersion=10001
-Xmx1200m
-javaagent:C:\development\applications\sts-3.9.5.RELEASE\lombok.jar

POM error, launch the IDE using a JDK

在使用JDK运行Lombok时,是否有人对如何在STS中管理Lombok有任何想法?因为我真的不想看到任何错误……


编辑01

  • STS 3.9.5.RELEASE版本
  • JDK和JRE版本1.8.0_172 64位

我将VM设置为直接在STS.ini文件内部使用以进行测试。但是,当从PATH环境变量使用JDK或JRE时,我确实得到了相同的错误。


编辑02

以下是Insurance bean的代码:

@Getter
@Setter
@Embeddable
public class Insurance implements Serializable {

    private static final long serialVersionUID = 1L;

    @Size(max = 255)
    private String name;

    @Size(max = 255)
    private String number;

    @ApiModelProperty(example = "2018-01-01")
    private LocalDate validityPeriodBegin;

    @ApiModelProperty(example = "2018-12-31")
    private LocalDate validityPeriodEnd;

    @Embedded
    private Address address;
}

编辑03

只需查找一下,但是我在IDE中遇到的错误不仅限于Lombok生成的getter / setter。我也从继承中得到这种错误……

enter image description here

我们可以看到,savedeleteById方法都被标记了,但是这些方法是从CrudRepository继承的……

@Repository
public interface StructureRepository extends CrudRepository<Structure, String> {

    Collection<Structure> findByParentIsNull();

    Collection<Structure> findByParentId(String id);

    Collection<Structure> findByAgentsLogin(String login);
}

我还尝试使用最新版本的Eclipse代替STS,并且得到的行为完全相同。

最后,我尝试使用JDK-10启动IDE,但没有得到其他结果……

这意味着它与Lombok或STS都不相关…… 可能是使用 JDK 启动 Eclipse 时遇到的问题吗?

1 个答案:

答案 0 :(得分:0)

我现在正在使用 STS-4.0.0.RELEASE 代替 STS-3.9.5.RELEASE ,并且我正在使用 JDK-11 代替 JDK-8 。结果:没有更多的错误……

这可能是一个错误,该错误已在 STS-4.0.0.RELEASE JDK-11 中修复,因为我在项目中没有做太多更改配置。