Lombok和Maven

35

我正在尝试在IntelliJ中使用Maven和VRaptor的Lombok,但它不起作用。

我已经阅读了一些stackoverflow上的信息,但没有解决我的问题。我已经在Intellij中启用了注释处理器,但仍然无效。

我还尝试过从命令行编译它(Windows),但是失败了。

我还尝试创建另一个项目而不使用maven并添加库,创建一些测试类它可以正常工作,编译并运行。

有什么帮助吗?

该项目只有2个类,1个实体和1个控制器

这是我的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>

<groupId>razor</groupId>
<artifactId>controle-de-ponto</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>

<description>Um sistema de controlo de ponto</description>

<repositories>
    <repository>
        <id>projectlombok.org</id>
        <url>http://projectlombok.org/mavenrepo</url>
    </repository>
</repositories>

<properties>
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
    <weld.version>2.1.2.Final</weld.version>
</properties>

<dependencies>
    <dependency>
        <groupId>br.com.caelum</groupId>
        <artifactId>vraptor</artifactId>
        <version>4.1.4</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>0.11.6</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet-core</artifactId>
        <version>2.1.2.Final</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.weld</groupId>
        <artifactId>weld-core-impl</artifactId>
        <version>2.1.2.Final</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>

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

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
        <!-- uncomment this line on app servers -->
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity</artifactId>
        <version>1.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-tools</artifactId>
        <version>2.0</version>
    </dependency>

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>br.com.caelum.vraptor</groupId>
        <artifactId>vraptor-jpa</artifactId>
        <version>4.0.2</version>
    </dependency>

    <dependency>
        <groupId>br.com.caelum.vraptor</groupId>
        <artifactId>vraptor-java8</artifactId>
        <version>4.0.0.Final</version>
    </dependency>
</dependencies>

<build>
    <finalName>controle-de-ponto</finalName>
    <!--<outputDirectory>/Users/turini/Documents/workspace/vraptor4/vraptor-blank-project/src/main/webapp/WEB-INF/classes</outputDirectory>-->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <compilerVersion>1.8</compilerVersion>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

尝试编译时出现错误:

[INFO] ------------------------------------------------------------------------
[INFO] Building controle-de-ponto 0.0.1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ controle-de-ponto ---
[INFO] Using 'ISO-8859-1' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ controle-de-ponto ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to C:\Users\Kennedy\Desktop\controle-de-ponto\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/Kennedy/Desktop/controle-de-ponto/src/main/java/br/com/caelum/vraptor/controller/IndexController.java:[37,16] cannot find symbol
  symbol:   method setNome(java.lang.String)
  location: variable usuario of type org.razor.cponto.beans.Usuario
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.167 s
[INFO] Finished at: 2015-02-04T13:41:01-02:00
[INFO] Final Memory: 17M/204M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project controle-de-ponto: Compilation failure
[ERROR] /C:/Users/Kennedy/Desktop/controle-de-ponto/src/main/java/br/com/caelum/vraptor/controller/IndexController.java:[37,16] cannot find symbol
[ERROR] symbol:   method setNome(java.lang.String)
[ERROR] location: variable usuario of type org.razor.cponto.beans.Usuario
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

1
你能具体一点吗?“它不起作用”是什么意思?出现了什么错误? - StephaneM
我编辑了我的问题并添加了更多信息。 - Kennedy Oliveira
Usuario类拥有@Data注解。而setNome方法是由它生成的。 - Kennedy Oliveira
@StephaneM 我添加了更多信息。 - Kennedy Oliveira
1
我在想他们是否使得与非Eclipse的任何IDE一起工作成为可能。 - EpicPandaForce
我会尝试在Eclipse上打开同一个项目,看看能否构建成功。 - Kennedy Oliveira
6个回答

74

这可能会起作用

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.16.12</version>
                    </path>                         
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

最新版本:


1
谢谢,我花了几个小时,你的解决办法解决了我的问题。 使用 maven-compiler-plugin 3.6.2lombok 1.16.16 进行编程。 - tehCivilian
1
这个可以工作,但出乎意料的是将 lombok 依赖项移动到 <dependencies> 列表的开头也有所帮助。maven-compiler-plugin 3.7.0 lombok 1.18.0 - Van0SS
根据文档,这适用于Java 9+ - https://projectlombok.org/setup/maven - Betlista
1
打开了我的眼界。感谢当我添加了另一个注解处理器(用于Map Struct)时,Lombok停止工作,而我没有意识到问题是由于现在缺少的注解处理器的隐式声明引起的。花费了我太多的时间... - Kevin Kussmaul
和 @KevinKussmaul 一样的问题...它救了我!! - davidvera

14

这应该可以直接使用,与IntelliJ idea无关。但我会:

  • 确保@Data注释是lombok的
  • 删除存储库定义(maven中央库就可以了)
  • 使用最新的lombok版本(1.16.0 截至本文撰写时
  • 重新构建(mvn clean package

我认为在您的情况下,maven找不到lombok jar文件,或者您可能有另一个@Data


1
谢谢!看起来是版本问题,我没注意到我在使用旧版本。真丢人哈哈。 - Kennedy Oliveira
很可能是仓库的问题:浏览http://projectlombok.org/mavenrepo/,你会发现它看起来不像一个Maven仓库。 - user180100
运行mvn clean package命令,然后删除旧的war文件,用新的替换。最后部署完成后,Bazinga :D +1 - Nabin

0

尝试使用这个依赖项

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.16</version>
    <scope>provided</scope>
</dependency>

0
在projectId标签中,尝试将projectlombok.org替换为org.projectlombok

-1
<dependency>  
  <groupId>org.projectlombok</groupId> 
  <artifactId>lombok</artifactId> 
</dependency>

这应该解决问题,我的 VS Code 上也遇到了同样的问题。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

-6

你需要添加lombok插件:

  <build>
  <plugins>
    <plugin>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok-maven-plugin</artifactId>
      <version>1.16.8.0</version>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>delombok</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

3
不,这是为了用等效的源代码替换Lombok注解。 - aliopi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接