2013-12-12 48 views
3

我們有一個maven版本,可以創建一個ear文件,該文件包含內部lib文件夾中帶有JPA實體的庫。耳文件有一個persistence.xml,在這裏我們添加使用<jar-file>標籤實體:persistence.xml中的Jar文件名問題

<persistence-unit name="some-id"> 
    <jar-file>MyEntities-1.0.0-SNAPSHOT.jar</jar-file> 

MyEntities LIB是建立一個獨立的Maven項目。

只要構建是在本地完成的,iaw,我只使用mvn install並且不部署到遠程快照存儲庫,這工作正常。它失敗了,當我們開始部署,因爲在當地.m2回購和遠程回購不同的jar文件名的回購:

mvn install創建一個在本地回購命名MyEntities-1.0.0-SNAPSHOT.jar文件,mvn deploy對遠程倉庫命名MyEntities-1.0.0-20131212-145600-42.jar文件。

現在,如果有人在我最後一次本地構建和maven之後部署了新的快照更新(基於策略或使用-U標誌),它會將遠程文件拖到本地回購站,並將具有該名稱的jar複製到耳朵,這會在部署時導致JPA錯誤,因爲無法找到實體(在persistence.xml中聲明瞭不同的jar文件)。

除了在組裝ear文件之前始終在本地構建外,是否有解決該問題的方法?

+0

我認爲你應該檢查部署 - 插件的文件...請參見本http://maven.apache.org/插件/ maven-deploy-plugin/usage.html並搜索-Dfile參數。 –

+0

不喜歡這種方法,因爲它改變了部署的快照構件的命名約定。另外,當碰撞版本號或釋放時我會遇到麻煩 - 因爲現在我會在部署插件的參數中設置版本號。 –

+0

只是猜測:如果你在'部署'之前做了'清潔',你還會遇到同樣的問題嗎? –

回答

0

這適用於我們的項目:

<persistence-unit name="foo"> 
    <!-- property comes from root pom.xml --> 
    <jar-file>../lib/foo-${bar.version}.jar</jar-file> 
    <properties> 

    </properties> 
</persistence-unit> 

<build> 
    <resources> 
     <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
       <includes> 
        <include>META-INF/persistence.xml</include> 
       </includes> 
     </resource> 
    </resources> 
</build>