2017-08-30 52 views
0

在基於客戶端 - 服務器的企業項目中,我在Envers中使用Hibernate。客戶端開發人員希望擁有包含所有實體的共享庫,以便他們可以在其客戶端開發中使用它們,而不包括任何服務器端依賴項。由於這些實體用@Audited註釋註釋,客戶端庫將包含Envers依賴關係,這是可接受的。但是,Envers本身包含各種各樣的依賴關係:hibernate-core,hibernate-jpa-api,javassist等等,它們也將包含在其中。我可以使用Hibernate Envers的Audited註釋而不包括整個Hibernate發行版嗎?

有沒有一種方法只包含在我的庫中的註釋,而不包括整個服務器端的東西?

回答

0

在這種情況下,它最終將取決於客戶端的上下文。

但假設您的客戶端使用某種協議與您的服務器端後端進行通信,您可以將org.hibernate.envers註釋打包到您的客戶端部署中包含的單獨工件中,就像我懷疑您正在使用JPA批註一樣。

您必須注意的唯一問題是,在升級hibernate-envers工件時,您需要重新包裝該特殊jar工件以考慮任何註釋更改。

我知道用戶已經要求能夠通過XML映射來配置Envers。希望和目標是嘗試在休眠7中包含此配置作爲orm.xml配置的一部分。

0

在最終解決方案中,我最終在Maven pom.xml中包含了「hibernate-envers」依賴項。在依賴聲明下面,我使用了一堆「排除」標記來排除那些僅在實際運行Hibernate時至關重要的依賴關係,但僅在使用註釋和驗證實體時纔是關鍵。通過這個我可以使用所有的Hibernate註釋(不僅@Audited),但仍然保持足跡相對較小。 我首先使用@Naros的方法(感謝您的建議),但這導致我包括越來越多的各種Hibernate註釋所需的源代碼依賴項。當然這取決於你想要達到的目標,但對我個人而言,基於Maven的解決方案效果更好。這裏是爲我工作的POM:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-envers</artifactId> 
     <version>5.2.7.Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>antlr</groupId> 
       <artifactId>antlr</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.javassist</groupId> 
       <artifactId>javassist</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.jboss</groupId> 
       <artifactId>jandex</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.apache.geronimo.specs</groupId> 
       <artifactId>geronimo-jta_1.1_spec</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.fasterxml</groupId> 
       <artifactId>classmate</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>dom4j</groupId> 
       <artifactId>dom4j</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.hibernate.common</groupId> 
       <artifactId> 
        hibernate-commons-annotations 
       </artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency>