Ломбок не генерирует шаблон в файле .class и не может найти решения - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь создать модульное приложение javafx, используя maven и hibernate. Вчера в моем файле module-info.java было много ошибок, поэтому я решил заново создать проект с нуля, чтобы изолировать проблему.

Проект не будет компилироваться, так как в среде IDE не удается найти методы, сгенерированные lombok. Когда я проверял файл .class, у него не было автоматически сгенерированного шаблона. У меня нет этой проблемы, когда у меня нет файла module-info.java.

Следуя некоторым предложениям, которые я видел в других постах, касающихся lombok, я убедился, что обработка аннотаций включена, а в IntelliJ включен плагин lombok. Когда я добавляю lombok.jar к моим зависимостям в структуре проекта, module-info.jar не компилируется, и intelliJ отображает «Неоднозначную ссылку на модуль: lombok», когда я наведу курсор на «требует lombok». Объявление модуля также подчеркнуто красным и отображает следующее сообщение: «Модуль« AlienDB »считывает пакет« lombok »как из« lombok », так и из« lombok ».

Это мой файл pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<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>Aliens</groupId>
  <artifactId>AlienDB</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>AlienDB</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>9</maven.compiler.source>
    <maven.compiler.target>9</maven.compiler.target>
  </properties>

  <dependencies>


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

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.4.3.Final</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>



  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0-M1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

файл module-info.java:


module AlienDB {

    requires lombok;
    requires java.persistence;
    requires org.hibernate.orm.core;
    requires java.naming;

    exports Aliens;
}

Alien1.java

package Aliens;

import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Data
@Entity (name = "alien2")
public class Alien1 {

    @Id
    @Column(name = "aID", nullable = false)
    private int aID;

    @Column(name = "aName")
    private String aName;


}

Основное приложение:

package Aliens;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;


public class App 
{
    public static void main( String[] args )

    {
        Configuration con = new Configuration().configure().addAnnotatedClass(Alien1.class);
        ServiceRegistry reg = new StandardServiceRegistryBuilder().applySettings(con.getProperties()).build();
        SessionFactory sf = con.buildSessionFactory(reg);

        Session session = sf.openSession();
        Transaction tx = session.beginTransaction();

        Alien1 alienName = session.get(Alien1.class, 1);
        //System.out.println(alienName.getAName());

        tx.commit();

        session.close();
        sf.close();
    }
}

Когда я запускаю приложение, как показано выше, с добавлением lombok jar к зависимостям, я получаю следующую ошибку:

Произошла ошибка при инициализации загрузочного слоя java.lang.module.ResolutionException: модуль lombok не читает модуль, который экспортирует org.mapstruct.ap.spi

Когда я удаляю lombok.jar из зависимостей в структуре проекта, module-info.jar не показывает никаких ошибок, но я получаю следующую ошибку:

Произошла ошибка при инициализации загрузочного слоя java.lang.module.FindException: модуль ломбок не найден, требуется AlienDB

В любом случае, когда я отменяю комментарий в выражении print line, я получаю следующий метод, предположительно потому, что lombok не смог сгенерировать шаблон:

Ошибка: (24, 37) Java: не удается найти символ символ: метод getAName () расположение: переменная alienName типа Aliens.Alien1

структура модуля:

C:.
├───.idea
├───src
│   ├───main
│   │   ├───java
│   │   │   └───Aliens
│   │   └───resources
│   └───test
│       └───java
│           └───Aliens
└───target
    ├───classes
    ├───generated-sources
    │   └───annotations
    ├───generated-test-sources
    │   └───test-annotations
    ├───maven-archiver
    ├───maven-status
    │   └───maven-compiler-plugin
    │       ├───compile
    │       │   └───default-compile
    │       └───testCompile
    │           └───default-testCompile
    ├───surefire-reports
    └───test-classes
        ├───Aliens
        └───META-INF

Я использую IntelliJ Ultimate 2019.1 SDK является Java 11 Уровень языка установлен на 9.

РЕДАКТИРОВАТЬ: я пытался запустить его на Eclipse, и я получаю ту же проблему - методы Lombok не генерируются, даже если они отображаются в качестве допустимого предложения в поле для предложений.

1 Ответ

0 голосов
/ 03 июля 2019

Мне удалось решить эту проблему, добавив следующий мой файл pom.xml.

 <configuration>
            <source>9</source>
            <target>9</target>
            <annotationProcessorPaths>
              <annotationProcessorPath>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.8</version>
              </annotationProcessorPath>
            </annotationProcessorPaths>
          </configuration>

...