簡體   English   中英

如何配置 IntelliJ 和 hibernate-jpamodelgen 注釋以從 IDE 啟動測試 class

[英]How to configure IntelliJ and hibernate-jpamodelgen annotations to launch test class from the IDE

我們在 IntelliJ 上有一個 git 多模塊項目 MAVEN。 我們使用 hibernate-jpamodelgen 作為標准構建器 API。

我們有 web 項目使用 maven 依賴實體庫,這些實體庫在實體 => 目標文件夾中生成帶注釋的 class。

從 mvn 終端啟動安裝和測試時,它的工作就像一個魅力,但問題是如果我們想要調試我們必須啟動的測試

-Dmaven.surefire.debug

選項和遠程應用程序。 這需要時間而且效率不高。 問題是當我們嘗試使用正確的 maven 配置(在 IntelliJ 中)或直接在 class 中單擊靠近方法名稱的“播放按鈕”時它不起作用,因為它在 web 項目中創建所有帶注釋的類但是空的身體

例如依賴庫中的內容

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor", date = "2022-12-30T10:11:22.168+0400")
@SuppressWarnings({ "deprecation", "rawtypes" })
@StaticMetamodel(FixedAsset.class)
public abstract class FixedAsset_ extends com.seanergie.persistence.ObjectWithUnidAndVersion_ {

    public static volatile SingularAttribute<FixedAsset, LocalDate> purchaseDate;
    public static volatile SingularAttribute<FixedAsset, String> serialNumber;
    public static volatile SingularAttribute<FixedAsset, MutableMoney> cost;
    public static volatile SingularAttribute<FixedAsset, String> notes;
    public static volatile SingularAttribute<FixedAsset, FixedAssetFilesStore> filesStore;

如果我嘗試從 intellij 啟動,在其他依賴目標中創建的注釋為 class 的文件夾

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor", date = "2022-12-30T10:12:05.141+0400")
@SuppressWarnings({ "deprecation", "rawtypes" })
@StaticMetamodel(FixedAsset.class)
public abstract class FixedAsset_ extends com.seanergie.persistence.ObjectWithUnidAndVersion_ {



}

如您所見,class 為空,因此編譯無法進行在此處輸入圖像描述

我們應該可以直接啟動而不用創建測試配置和修改它(我們有 100 多個測試類,所以我們不能為每個創建一個 conf)。

我們還看到它嘗試在每個測試中編譯所有項目在此處輸入圖像描述

我們嘗試添加 pom.xml

<dependency><!-- For launch tests directly from IntelliJ play button-->
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.activation</groupId>
                    <artifactId>jakarta.activation</artifactId>
                </exclusion>
            </exclusions>
            <scope>provided</scope>
        </dependency>

我們還嘗試在 IntelliJ 設置中停用或激活注釋處理器,但沒有任何效果

所以最后,當我們甚至從 IntelliJ(不僅是終端)啟動 mvn clean install 時,它會在我們定義實體的每個庫中正確創建所有帶注釋的類,但是當我們啟動測試時,它會創建另一個時間相同的類,但主體是空的,並且在項目中實體未定義(但使用其他實體作為依賴項!)

讓它工作的好方法是什么?

我相信我已經解決了你的難題。

“空”元模型類的出現可能是由以下原因之一引起的:

  • 許多 IDEA 插件會影響編譯過程,顯然會失敗
  • jpamodelgen注釋處理器可能會執行額外的工作

最后一個原因似乎是實際原因:

持久性XML

默認情況下,處理器在 /META-INF 中查找 persistence.xml 指定此選項可以指定來自不同位置的 persitence.xml 文件(必須在類路徑上)

格式

允許指定額外的實體映射文件。 此選項的指定值是映射文件名的逗號分隔字符串。 即使指定了此選項,/META-INF/orm.xml 也是隱含的

fullyAnnotationConfigured

如果設置為 true,處理器將忽略 orm.xml 和 persistence.xml。

我已經檢查並確實將META-INF/orm.xml與定義的“外部”實體放入資源文件夾導致jpamodelgen生成空元模型類 - 對我來說它看起來像一個錯誤。

您有以下選項(實際上,取決於您的項目結構):

  • 如果模塊沒有定義實體類,則從模塊依賴項中刪除jpamodelgen ,還要確保對jpamodelgen的依賴項定義為不可傳遞的,即<scope>provided</scope>
  • 重命名額外的 xml 映射文件 - 如果您在spring上,則可以通過spring.jpa.mapping-resources指定這些映射
  • 按照 JBoss 指南中的描述配置注釋處理器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM