Lombok 在已编译的 class 中创建获取和设置,但不在 Eclipse 2020-09 中创建生成源

Lombok creating gets and sets in compiled class but not the generated-sources in Eclipse 2020-09

我已经使用 java -jar lombok-1.18.14.jar 安装了 Lombok,在 Eclipse 2020-09 (4.17) 中收到成功消息,但它没有出现在关于 window 中。

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>redact</groupId>
    <artifactId>redact</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.plugin>3.5.1</maven.compiler.plugin>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <springFramework>5.2.9.RELEASE</springFramework>
        <springSecurity>5.4.1</springSecurity>
        <thymeleaf>3.0.11.RELEASE</thymeleaf>
        <thymeleafSecurity>3.0.4.RELEASE</thymeleafSecurity>
        <mysql>8.0.21</mysql>
        <logback>1.2.3</logback>
        <slf4j>1.7.30</slf4j>
        <mapStruct>1.4.0.Final</mapStruct>
        <lombok>1.18.14</lombok>
    </properties>

    <dependencies>
        <!-- Servlet API Dependency -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- Spring Framework Dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springFramework}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${springFramework}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springFramework}</version>
        </dependency>

        <!-- Spring Data Dependencies -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>

        <!-- Spring Security Dependencies -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${springSecurity}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${springSecurity}</version>
        </dependency>

        <!-- Spring JDBC dependency -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${springFramework}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.13.Final</version>
        </dependency>

        <!-- Mysql connector dependency -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql}</version>
        </dependency>

        <!-- JSTL Dependency -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- Thymeleaf -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>${thymeleaf}</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>${thymeleaf}</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
            <version>${thymeleafSecurity}</version>
        </dependency>

        <!-- Logback -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback}</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-mapstruct-binding</artifactId>
            <version>0.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapStruct}</version>
        </dependency>

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${mapStruct}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.22.Final</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin}</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok}</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapStruct}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

eclipse.ini:

-startup
plugins/org.eclipse.equinox.launcher_1.5.800.v20200727-1323.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1300.v20200819-0940
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs -javaagent:D:\dev\eclipse\lombok.jar -Xbootclasspath/a:D:\dev\eclipse\lombok.jar
-Dosgi.requiredJavaVersion=11
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=11
-Dosgi.dataAreaRequiresExplicitInit=true
-Xms256m
-Xmx2048m
--add-modules=ALL-SYSTEM
-javaagent:D:\dev\eclipse\lombok.jar

原来我安装Lombok的时候只包含了最后一个-javaagent。我一打开 Eclipse,就发生了 lombok/launch/PatchFixesHider$Transform 错误 (as explained here).

我尝试再次安装,并从安装程序中看到有关 -vm-vmargs 的信息。它说如果有自定义 -vm 参数,则还需要将 -vmargs -javaaggent:lombok.jar (全部放在一起)。我的 .ini 文件中没有 -vm,但我还是按照指示更改了文件以在 -vmargs 之后包含 -javaagent 以进行测试。补丁报错停止了,但是安装还是不行

我使用 -javaagent 参数尝试了所有可能性,只有当我将参数与 -vmargs 放在同一行时,补丁错误才会停止。

如果我删除最后一行 -javaagent-Xbootclasspath 标记,没有任何变化。

我尝试将 Lombok 版本 1.18.8 安装到 1.18.14Eclipse Photon2020-062020-09(所有可能的组合)和 none成功了。

当我把例如user.getPassword(),我从 Eclipse 中得到一个错误(方法未定义),但 Maven 可以正确构建和安装(通过 bash 或通过 Eclipse 运行 作为 Maven)

我正在使用 MapStruct 并且正在为它们正确创建生成的源。

我在测试中意识到的事情:有时我运行使用bash清理maven并安装,因为它更快并且生成的源是为MapStruct创建的,而不是为龙目岛。所以,我遇到了与 Eclipse 相同的问题。那么,问题出在 Eclipse 还是 Maven 上?是否会使用纯 mvn 安装创建 Lombok 源代码?

版本:

Lombok 1.18.14 fails to be installed in Eclipse 2020-09 (4.17.0).

作为此已知问题的解决方法改用Lombok 1.18.12

经过多次尝试和失败,我可以让它工作。

此问题与 this issue 有关。

我尝试安装许多不同的 Lombok 版本,从 1.18.8 到 1.18.14 一直失败。为了进行最后一次测试,我从我的 .m2 存储库中删除了所有版本,只保留了 1.18.12 版本,运行 再次安装并且它成功了。

如果有人遇到这个问题,我的建议是从 .m2 存储库中清除所有版本的 Lombok,从 eclipse.ini 文件中删除任何引用 Lombok 的 -javaagent 并使用 1.18.12 版本进行全新安装。

非常感谢@howlger 帮助了我很多并向我展示了问题。