Статическая метамодель JPA не распознается IntelliJ

Я создал приложение с помощью JHipster с Gradle в качестве инструмента сборки.

Когда я создал сущность, я добавил поддержку фильтрации, которая сгенерировала статическую метамодель JPA. Но IntelliJ не распознает метамодели.

Я включил настройки процессора аннотаций в IntelliJ, но, похоже, это не работает.

Какие настройки нужно изменить, чтобы IntelliJ распознавал статические метамодели JPA?


person Aman Tuladhar    schedule 14.12.2017    source источник
comment
Признание означает, что IDE не добавляет классы метамодели в путь к классам или IDE не генерирует классы метамодели в процессе сборки?   -  person Henrique Fernandes Cipriano    schedule 16.12.2017
comment
IDE генерирует метамодели. Я могу запустить свое приложение, но IntelliJ показывает ошибку, когда я открываю файл, который использует эти метамодели   -  person Aman Tuladhar    schedule 17.12.2017


Ответы (4)


Чтобы заставить IntelliJ IDEA распознавать сгенерированные классы, мне пришлось добавить эту строку в build.gradle

sourceSets {
    main.java.srcDirs += 'build/generated/source/apt/main'
}

Обновить

Лучшее решение - изменить плагин IntelliJ.

idea {
    module {
        sourceDirs += file("build/generated/source/apt/main")
        generatedSourceDirs += file("build/generated/source/apt/main")
    }
}
person Aman Tuladhar    schedule 20.12.2017

По умолчанию классы метамодели создаются в папке /target/generated-sources/annotations. Похоже, что эта папка не зарегистрирована как исходная папка.

Вы можете изменить это вручную в своей среде IDE или, если вы используете сборку Maven, вы можете сделать это автоматически, добавив следующий плагин в конфигурацию сборки:

<project>
    ...

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>target/generated-sources/annotations</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    ...
</project>

Я объяснил это более подробно в одном из мои советы по переходу в спящий режим.

person Thorben Janssen    schedule 18.12.2017
comment
Я использую gradle, который явно упоминается в вопросе. - person Aman Tuladhar; 18.12.2017

Мне не разрешено комментировать, но я хотел добавить к ответу Торбена Янссена. Помимо конфигурации плагина, мне также пришлось добавить это в зависимости проекта:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.4.21.Final</version>
        </dependency>

Это то, что генерирует источники в пути target/generated-sources/annotations.

В итоге помпон получился таким:

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.4.21.Final</version>
        </dependency>
        ...
    </dependencies>

    ...

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sources>
                                <source>target/generated-sources/annotations</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        ...
    </build>

person gabrieeel    schedule 25.09.2020

Сборка Intellij распознает все процессоры, перечисленные в этом файле:

META-INF/services/javax.annotation.processing.Processor

.

Если вы используете Eclipse Link, включите эту строку в файл:

org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor

Режим гибернации:

org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor

Убедитесь, что у вас есть все зависимости: я опишу использование maven только для примера:

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.7.0</version>
        <scope>provided</scope>
</dependency>

OR

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>5.2.12.Final</version>
    <scope>provided</scope>
</dependency>
person Henrique Fernandes Cipriano    schedule 17.12.2017
comment
У меня нет папки META-INF - person Aman Tuladhar; 18.12.2017