Я использую 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>
Если я попытаюсь (повторно) запустить приложение после того, как QClass были удалены, и без их повторного создания, я получу исключение java.lang.ClassNotFoundException для этих QClass, что имеет смысл.
У меня точно такая же проблема после обновления с Java 8 до Java 11.
@RenéReitmann Я также использую Java 11, так что это может быть связано с этим. Я прокомментировал всю часть, используя QueryDSL, чтобы продолжить работу над проектом, и когда я раскомментировал их позже, чтобы проверить, все ли работает нормально, я обнаружил, что больше не страдаю от этой проблемы...
У меня также есть такая же проблема при использовании Java 11
Связанный проблема
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>, но у меня все еще есть та же проблема. как прежде...
Какая у вас ошибка?