Классы, сгенерированные QueryDSL, продолжают удаляться в проекте maven в Spring Tool Suite

Я использую QueryDSL в проекте maven Spring Boot в Eclipse с активированным Spring DevTools, и все работает нормально, за исключением того факта, что QClass, используемый в QueryDSL, удаляется, и в следующий раз, когда я пытаюсь перезапустить проект (или он пытается автоматическая перезагрузка через Spring DevTools) я получаю сообщение об ошибке, и мне нужно снова пройти «Запуск от имени» -> «Maven generate-sources». Я не уверен, что именно вызывает удаление, но я заметил, что, например, добавление или удаление файла вызовет удаление. Удаление DevTools не помогло.

Есть ли способ предотвратить это постоянное удаление или убедиться, что классы впоследствии автоматически регенерируются?

Вот соответствующая часть моего 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>REDACTED</groupId>
    <artifactId>REDACTED</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>REDACTED</name>
    <description>REDACTED</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
    [...]
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    [...]
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/generated-sources/customfolder</outputDirectory>
                            <clearOutputDir>false</clearOutputDir>
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.querydsl</groupId>
                        <artifactId>querydsl-apt</artifactId>
                        <version>${querydsl.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/generated-sources/customfolder/</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Какая у вас ошибка?

Alien 19.03.2019 18:13

Если я попытаюсь (повторно) запустить приложение после того, как QClass были удалены, и без их повторного создания, я получу исключение java.lang.ClassNotFoundException для этих QClass, что имеет смысл.

Jean Alexandre 19.03.2019 18:16

У меня точно такая же проблема после обновления с Java 8 до Java 11.

René Reitmann 18.04.2019 14:48

@RenéReitmann Я также использую Java 11, так что это может быть связано с этим. Я прокомментировал всю часть, используя QueryDSL, чтобы продолжить работу над проектом, и когда я раскомментировал их позже, чтобы проверить, все ли работает нормально, я обнаружил, что больше не страдаю от этой проблемы...

Jean Alexandre 18.04.2019 16:03

У меня также есть такая же проблема при использовании Java 11

patelb 03.07.2019 21:29

Связанный проблема

AndyB 03.06.2020 17:18
4
6
745
1

Ответы 1

Change the pom.xml as follows. It will work

 <dependency>
     <groupId>com.querydsl</groupId>
     <artifactId>querydsl-apt</artifactId>

  </dependency>
  <dependency>
      <groupId>com.querydsl</groupId>
      <artifactId>querydsl-jpa</artifactId>
  </dependency>

and add the plugin

 <plugin>
        <groupId>com.mysema.maven</groupId>
        <artifactId>apt-maven-plugin</artifactId>
          <version>1.1.3</version>
          <executions>
             <execution>
                 <goals>
                   <goal>process</goal>
                 </goals>
         <configuration>
             <outputDirectory>target/generated-sources/java</outputDirectory>
             <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
          </configuration>
         </execution>
      </executions>
    </plugin>

Я попытался заменить querydsl-core на querydsl-apt, как вы советовали, изменив target/generated-sources/customfolder на target/generated-sources/java и удалив <clearOutputDir>false</clearOutputDir>, но у меня все еще есть та же проблема. как прежде...

Jean Alexandre 28.03.2019 18:28

Другие вопросы по теме