【问题标题】:persistence.xml not found in Eclipse Maven Project在 Eclipse Maven 项目中找不到 persistence.xml
【发布时间】:2014-01-21 08:59:19
【问题描述】:

我无法修复persistence.xml file not found eclipse 问题,这是一个简单的测试项目(Maven Nature),用于非常基本的 EJB 测试,该文件确实位于 src/main/resources/META-INF/... 这是pom.xml 内容。尝试将文件夹添加到项目的构建路径,更新 Maven 项目。到目前为止没有运气,任何帮助将不胜感激,谢谢!

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>LibEE</groupId>
  <artifactId>LibEE</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>

      <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<mainClass>main.resources.Main</mainClass>

</manifest>
</archive>
</configuration>
</plugin>
   </plugins>
  </build>

  <dependencies>
    <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.1.0</version>
    </dependency>

     <dependency>
    <groupId>org.ow2.spec.ee</groupId>
    <artifactId>ow2-ejb-3.0-spec</artifactId>
    <version>1.0.13</version>
</dependency>

<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>


  </dependencies>
</project>

这是persistence.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="LibEE" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/LibEE</jta-data-source> <!-- Refers to data source in Enterprise server -->
    <class>main.java.entities.Book</class>
<properties>
    <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    <property name="eclipselink.logging.level" value="INFO"/>
</properties>


</persistence-unit>

</persistence>

【问题讨论】:

  • src/main/resources 默认应该在构建路径中,但请确保 Maven 插件默认没有对其进行排除。它对我有用:/究竟是什么给了你错误? Eclipse 本身,单元测试,还是部署到服务器时?
  • 这在 Eclipse 中显示,但是修改 pom.xml 似乎会带来新的错误......我猜它与 maven 相关
  • 这一切都解决了吗?如果是这样,请提供您的解决方案,以便其他有相同问题的人受益。

标签: java eclipse maven jpa persistence.xml


【解决方案1】:

persistence.xml 文件必须添加到类路径以解决此问题。

尝试如下:

  1. 创建/更新目录src/main/resources/META-INF,将persistence.xml文件放在这里

  2. 运行 Maven->更新项目配置

  3. 通过在 Eclipse IDE > 属性 > Java 构建路径 > 源选项卡中右键单击您的项目,验证 src/main/resources 是否已添加到源文件夹(Java 资源)。您将在此处找到 /src/main/resources。

  4. 选择 Maven->更新项目配置或项目->清理

  5. 如果您构建应用程序,请检查 target//WEB-INF/classes/META-INF/persistence.xml 下的 persistence.xml 文件(或您如何配置类路径)。

  6. 就是这样!

【讨论】:

    【解决方案2】:

    我遇到了类似的问题(但使用 JDeveloper 11),其中 src/META-INF/persistence.xml 未包含在我的项目的 JAR 中(/META-INF/persistence.xml)。

    我的解决方法是将以下内容添加到 pom.xml(在 &lt;build&gt; 内):

    <resources>
        <resource>
            <directory>src</directory>
            <includes>
                <include>META-INF/persistence.xml</include>
            </includes>
        </resource>
    </resources>
    

    【讨论】:

      【解决方案3】:

      上面的答案是正确的;但是,无论我尝试什么,这种持续(双关语)都无法正常工作,直到我在 Maven 的依赖项中包含了休眠实体管理器。

      <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <version>4.3.1.Final</version>
      </dependency>
      

      之后就正常了。

      【讨论】:

        【解决方案4】:

        解决方案 1. 在您的 pom.xml 中将 &lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt; 替换为 &lt;sourceDirectory&gt;src/main/resources&lt;/sourceDirectory&gt;

        解决方案 2. 在 build 标签下添加这个

        <resources>
                <resource>
                    <directory>src</directory>
                    <includes>
                        <include>**</include>
                    </includes>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
         </resources> 
        

        解决方案 3。 在你的 pom.xml 中删除 &lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt; 然后 maven 会寻找 default layout

        【讨论】:

          【解决方案5】:
          1. 将此代码添加到您的 pom.xml(在“构建”部分)

            <resources>
                <resource>
                    <directory>src</directory>
                    <includes>
                        <include>**</include>
                    </includes>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
               </resource>
            

          2. 把你persistence.xml放到src/main/resources/META-INF

          3. 进入Project/Properties/Java Build Path/Source,选择所有文件夹,点击“Remove”,“OK”
          4. 右键单击项目/Maven/更新项目...,“确定”

          问题似乎是,m2e 插件将“排除:**”添加到 src/main/resources 文件夹(请参阅 Project/Properties/Java Build Path/Source)。

          【讨论】:

            【解决方案6】:

            所有答案似乎都是正确的。问题,没有人解释发生了什么。为了进一步了解,我关注了maven here提供的资源。

            <project>
              ...
              <name>My Resources Plugin Practice Project</name>
              ...
              <build>
                ...
                <resources>
                  <resource>
                    <directory>[your directory]</directory>
                    <includes>
                      <include>[resource file #1]</include>
                      <include>[resource file #2]</include>
                      <include>[resource file #3]</include>
                      ...
                      <include>[resource file #n]</include>
                    </includes>
                  </resource>
                  ...
                </resources>
                ...
              </build>
              ...
            </project>
            

            【讨论】:

              【解决方案7】:

              在src->main->java->下创建一个META-INF文件夹(如果不存在的话) 并放置您的 persistence.xml 文件。

              如果添加了最新的hibernate版本的hibernate-core.jar,则不需要hibernate-entitymanager.jar。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-12-15
                • 2011-08-19
                • 1970-01-01
                • 2012-05-08
                • 2015-08-08
                • 2014-07-13
                • 1970-01-01
                相关资源
                最近更新 更多