在persistence.xml中使用Maven过滤的Eclipse错误

时间:2015-06-16 09:47:52

标签: maven jar persistence filtering

我有一个使用hibernate的JPA Maven项目。

我必须指定一个jar文件来加载位于persistence.xml

src/main/resources/META-INF中的外部类
<persistence unit name="PersistenceUnit" transaction-type="JTA"
    ...
    <jar-file>lib/${project.persistencejar}.jar</jar-file>

使用Maven过滤(文件名可以根据各种Maven设置进行更改)。 我通过在pom.xml

中加入来指示Maven过滤
<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>META-INF/persistence.xml</include>
        </includes>
    </resource>
</resources>

并且正在运行mvn clean install会产生可部署且正常工作的人。

问题是:如果我在Eclipse项目配置中启用了JPA Facet,那么Eclipse会抱怨

Multiple annotations found at this line:
    - JAR file "lib/${project.persistencejar}.jar" cannot be resolved
    - The path to the JAR file will vary on your runtime environment. Please make sure the 
      specified path fits your particular environment.

并禁用它每次更新时都不构建我的JPA项目(因此每次持久性发生变化时都必须运行Maven。是否有一种解决方法可以告诉Eclipse他在哪里可以找到开发中的jar时间?或者我使用错误的方法过滤?

谢谢

2 个答案:

答案 0 :(得分:4)

如果问题只出现在Eclipse的错误消息中,您可以在

中禁用它
  

窗口 - &GT;首选项&GT;爪哇   持久性 - &gt; JPA-&gt;错误/警告 - &gt;持久性单元

&#34设置&#34;忽略&#34; ;无法解析JAR文件&#34;

答案 1 :(得分:1)

我已经这样解决了:

persistence.xml中的

替换整个<jar-file>标记,即

<persistence-unit name="PersistenceUnit" transaction-type="JTA">
    ...
    <!-- here is where the jar file is supposed to go -->
    ${importjarfile}
    ...
</persistence-unit>

然后在pom.xml财产中加入

<properties>        
    <!-- jar of persistence -->
    <importjarfile><![CDATA[<jar-file>lib/${project.persistencejar}.jar</jar-file>]]></importjarfile>
</properties>

或者在src/main/filters/profilename.properties档案中

importjarfile = <jar-file>lib/${project.persistencejar}.jar</jar-file>

这样Eclipse就不会看到jar-file标签,也不会抱怨。在构建时,maven将生成正确的持久性xml。