代码之家  ›  专栏  ›  技术社区  ›  Mark Baijens

Eclipse不识别persistence.xml的内容

  •  48
  • Mark Baijens  · 技术社区  · 14 年前

    我在Eclipse中得到以下错误:

    persistence.xml文件没有可识别的内容。

    我的persistence.xml文件在我的应用程序中工作得很好,但是Eclipse一直给我这个错误。在移动文件并使用M2Eclipse更新项目配置之后,我得到了这个。我没有更改文件本身。有人知道怎么解决这个问题吗?

    持久性.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" 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">
        <persistence-unit name="localDB" transaction-type="RESOURCE_LOCAL">
    
            <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
            <class>package.Users</class>
            <properties>
                <!-- enable warnings for debugging -->
                <property name="openjpa.Log" value="DefaultLevel=TRACE, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
                <!-- connection properties -->
                <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost/test"/>
                <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
                <property name="openjpa.ConnectionUserName" value="root"/>
                <property name="openjpa.ConnectionPassword" value=""/>
    
            </properties>
        </persistence-unit>
    </persistence>
    

    更新

    看起来像是m2eclipse中与jpa结合使用的一个bug。

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=251323

    通过设置选项将其显示为警告而不是错误暂时解决

    26 回复  |  直到 6 年前
        1
  •  32
  •   Community CDub    11 年前

    我用以下方法解决了这个问题(我使用的是RAD V8.5.1):

    1. Windows-->首选项-->验证
    2. 向下滚动到“JPA验证器”,单击“设置”下的省略号。
    3. 单击“添加包含组…”按钮。
    4. 单击显示为突出显示的新包含组。
    5. 单击“添加规则…”按钮。
    6. 弹出对话框菜单。单击“文件夹或文件名”单选按钮,然后单击“下一步”。
    7. 单击“浏览文件夹…”并导航到工作区中项目(我的项目是多模块应用程序中的.war)内的SRC目录(在我的情况下,它是“SRC/main/resources”)。
    8. 单击“完成”。
    9. 点击“确定”。这将提示完整的生成。
    10. 错误将消失。
        2
  •  30
  •   Tim Cooper    14 年前

    有同样的错误问题

    persistence.xml文件没有可识别的内容

    通过在Eclipse中编辑文件,任何编辑都可以完成。在保存错误之后就消失了。

        3
  •  15
  •   Rick    14 年前
    <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">
    

    为我工作!

        4
  •  14
  •   jadrake    14 年前

    我知道这里有什么问题……JPA方面假定META-INF文件夹直接位于源文件夹下。如果您使用的是Maven项目,那么您可能拥有类似于src/main/resources或src/test/resources的东西。如果persistence.xml在这些文件夹下,它会抱怨。如果您创建一个新的源文件夹(称为“jpa”)并在其中创建一个META-INF/persistence.xml,那么它将成功地找到它。(我还必须做一个干净/封闭/开放的项目)

    这当然是一种痛苦……我可以看到很多情况下,这不会奏效。

        5
  •  13
  •   willtardy    14 年前

    我在Eclipse3.6(Helios)中也遇到了同样的问题。原因是JPA方面被设置为JPA版本1.0,但是我的persistence.xml文件指定的是JPA版本2。所以我将JPA方面改为2.0版,问题就消失了。(项目-->属性-->项目方面-->“配置”下拉列表-->将此设置为“最小JPA 2.0配置”

        6
  •  8
  •   Dave    14 年前

    将此错误转换为警告可能会使问题消失,但它不会用EclipseDali插件修复底层问题。这也意味着非常有用的JPA结构和JPA细节视图将无法工作。

    OP提供的链接和这里大多数答案的方法实际上是为了解决另一个问题,Maven希望过滤persistence.xml文件,从而告诉Eclipse忽略它。解决这个问题的可行方法被解释了。 here 并涉及从项目属性中类路径的src/main/resources条目中删除多余的“**”。

    回到OP最初的问题,我得到了完全相同的错误消息(它本身的输入和输出告诉您persistence.xml文件已经找到)。对于我来说,解决方案是将持久性XML元素从此处更改:

    <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_1_0.xsd"
        version="1.0">
    

    对此:

    <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">
    

    一旦改变了,错误就消失了,大理立刻活跃起来,现在一切都正常了。希望有一天这能帮助别人。

        7
  •  5
  •   Kawu    6 年前

    对于某些Indigo(3.7)版本,该错误已重新出现。请参见这里: https://bugs.eclipse.org/bugs/show_bug.cgi?id=357810

    右键单击项目->maven->更新项目配置…

    这个 可以 销毁某些buildPath条目和/或部署程序集,这非常烦人,因此只有在更改maven deps时才这样做。

    要解决persistence.xml消息直到补丁发布,您需要 在许多操作中清理项目 如偶数 将错误级别设置为“忽略”不起作用 . 这是一个十足的骗局。

        8
  •  2
  •   Martin Trummer    14 年前

    我通过项目ProjtProjks- Java持久性来修复这个问题,然后在“规范元模型(JPA 2)”部分中设置“源文件夹”为:“SRC/生成/资源”

        9
  •  2
  •   Dustin    13 年前

    有关于这个的更新吗?这仍然是一个问题,似乎是对的?如果我创建了一个JPA项目,转换为Maven项目,就会出现错误,并且我无法用任何推荐的方法来消除它。

    编辑

    好吧,所以在移动了一些文件夹之后,它在一个实际的 Maven directory format ,它仍然不起作用-但在 src/main/java 名为META-INF,链接到 src/main/resources/META-INF 解决了。

    创建maven项目并添加jpa方面也可以工作,但这仅仅是因为jpa方面将META-INF和persistence.xml文件添加到 SRC/MeN/Java 我认为这不完全正确。

        10
  •  2
  •   Harun ERGUL    10 年前

    如果你

    • 将JPA项目转换为Maven项目或
    • 将JPA方面添加到Maven项目中。

    解决方案是

    • 选择 Windows>首选项>验证
    • 为手动验证和生成验证禁用JPA验证程序

    更改这些设置后,请清理项目。

        11
  •  2
  •   Chris Hinshaw    9 年前

    我使用的是EclipseMars,也有同样的错误。我要做的是1为项目方面设置JPA的版本。 right click project -> Properties -> Project Facets 在我的例子中,将JPA的版本设置为2.1。

    仅配置JPA项目方面不会删除错误。您还需要配置平台。

    接下来我必须配置JPA平台。 right click project -> Properties -> JPA . 在我的情况下,将排形改为休眠2.1。

    当您使用持久性XML编辑器打开persistence.xml并且只有一个 Source 选项卡位于底部,而不是用于常规、连接、选项、属性等的其他选项卡。

        12
  •  1
  •   viviansteller    13 年前

    我通过在Eclipse中创建一个“符号链接”解决了这个问题。因此,我的persistence.xml文件将如Maven所期望的和M2Eclipse所要求的那样保留在src/main/resources/meta-inf中。但是,为了修复Dali问题,在SRC/Ma/Java/Meta -IF中创建一个新文件,链接到SRC/Mealth/Realth/Meta AF中的一个。在创建新文件时,通过点击“高级”选项,使用“浏览…”按钮来定位文件。请注意,这不会在META-INF文件夹中创建物理文件,但是您需要该文件夹本身才能创建链接。

    希望这对你有用。

        13
  •  1
  •   J Slick    12 年前

    我有 src/main/java/META-INF/persistence.xml 在Eclipse中使用嵌入式Tomcat可以很好地工作。因为它没有被复制到马文建造的战争中,我把它转移到 src/main/resources/META-INF .

    现在 src/main/resources/META-INF/persistence.xml 不会生效。

    如果重命名为xyz_persistence.xml,则验证良好。
    如果重命名为persistence.xml,则无法验证。

    当这些烦人的情况出现时,我经常会发现许多不同的“解决方案”,比如我的,其中大多数并不普遍适用。

    所以,这是我的“解决方案”,我认为绕过一个bug是一种黑客行为:

    要删除错误“persistence.xml文件没有可识别的内容”错误,请禁用JPA验证程序:

    • 列表项 选择菜单项“项目”>“属性”>“首选项”>“验证”
    • 列表项 对手动验证和生成验证禁用JPA验证程序。

    你可能需要清理和重建。您的里程可能会有所不同。

        14
  •  1
  •   blackberry dev    10 年前

    不需要更改XML文件,也不需要在SRC文件夹中添加XML。将persistence.xml文件放入META-INF文件夹,然后放入META-INF SRC/MAIN/RESOURCE文件夹。 尝试以下方法: 右键单击<代码>项目& gt;java构建路径& gt;源标签/gt;ProjutsNo/Src/main /Realth≫集合包含(全部)和排除(无)。这对你有用。在Rad7&8..5&Eclipse上尝试过这种方法。

    不需要在XML文件中更改和执行,也不需要在SRC文件夹中添加XML。将persistence.xml文件放入META-INF文件夹,然后放入META-INF SRC/MAIN/RESOURCE文件夹。 尝试以下方法: 右击 project> Java Build path > Source Tab > ProjectName/src/main/resource > set Included(All) and Excluded(None). 然后清理并构建项目。这对你有用。在Rad7&8..5&Eclipse上尝试了这种方法。

        15
  •  0
  •   Qwerky    14 年前

    文件在项目结构中的位置?

    作为参考,我在maven模块中有我的名称/src/main/resources/META-INF/

        16
  •  0
  •   Pascal Thivent    14 年前

    很难说,因为很难复制 persistence.xml 是完全有效的),但可以尝试:

    • 清理项目(包括“项目清理”和“Maven clean )
    • 强制Eclipse再次验证XML文件(右键单击,然后选择验证XML文件)。
        17
  •  0
  •   willcodejavaforfood    14 年前

    我也遇到过同样的问题,对我来说,有效的方法是复制文件的内容,删除它,创建一个新的persistence.xml文件,然后将内容粘贴回。

        18
  •  0
  •   Gursel Koca    14 年前

    我遇到了同样的问题。Goto Project属性-gt;java构建路径-gt;源,移除* / Java排除的SRC/主/资源源属性。然后添加META-INF/persistence.xml。然后重新启动Eclipse。您应该在项目资源管理器的JPA内容下使用persistence.xml。之后,恢复您的更改。

    好吧,我的建议看起来很愚蠢,但神奇的是它起作用了。顺便说一下,我的Eclipse版本是3.6。

        19
  •  0
  •   Fred Bricon    13 年前

    问题已在Indigo中解决(2011年6月发布),请参见 https://bugs.eclipse.org/bugs/show_bug.cgi?id=251323#c24 https://issues.sonatype.org/browse/MECLIPSEWTP-11 .

    “persistence.xml文件没有可识别的内容。”错误可能在项目导入或工作区启动时随机出现,但可以通过项目清理或Maven项目更新来修复。这将在SR2的大理解决。

        20
  •  0
  •   Robert Hume    13 年前

    我也有同样的问题,为了让它消失,我必须确保这行是文件顶部的第一行(没有前导空行或空格):

    <?xml version="1.0" encoding="UTF-8"?>
    
        21
  •  0
  •   dgimenes    12 年前

    我有同样的错误,但用不同的方法解决了它。

    事情是META-INF必须被视为一个源文件夹,因为它在/ejbmodule下(我的是一个ejb项目),所以我假设它在构建路径上。实际上,它在构建路径的“排除”列表中。所以,我所做的就是右键单击ProjectExplorer视图上的META-INF文件夹,然后选择“在构建路径上包含”菜单。然后我让Eclipse清理项目,一切又恢复了正常。

    最好的问候。

        22
  •  0
  •   Max    12 年前

    我也有同样的问题。我的解决方案:右键单击persistence.xml文件->jpa工具->同步类列表。之后就解决了。

        23
  •  0
  •   Marc    12 年前

    在我的例子中,是maven插件,它有一个bug,将“exclude”设置为 . 在资源文件夹的生成路径中。去除 . 帮我解决了这个问题

        24
  •  0
  •   Amzi    12 年前

    我通过将META-INF文件夹拖到src/main/resources并将其拖回src/test/resources来修复它。这就是我解决这个问题所花费的全部时间。我尝试了以上所有的步骤,但没有一个似乎是我的工作,最后这一个做的诀窍。

        25
  •  0
  •   arvinq    12 年前

    通过这样做解决了这个问题:

    1. 在SchemaLocation中,我删除了“h ttp://java.sun.com/xml/ns/persistence/”,使其:

    xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence persistence_2_0.xsd”

    1. 我补充说 <?xml version="1.0" encoding="UTF-8"?> 在顶部。

    2. 我负责建设这个项目。错误消失了。

    3. 我再次添加了“h ttp://java.sun.com/xml/ns/persistence/”:

    xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence” http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

    1. 我负责建设这个项目。错误不存在。

    2. 我删除了 <?xml version=“1.0”encoding=“utf-8”?gt; 在顶部。

    3. 我负责建设这个项目。错误仍然不存在。

    希望这对将来的人有所帮助。

        26
  •  0
  •   Andreas Covidiot    10 年前

    好啊。。。另一个相当强大的解决方案对我很有效,因为大多数顶级解决方案都没有:

    • 因为我使用了Mercurial,可以很容易地返回,在当前版本和最新版本中没有任何显著的差异,所以它的工作方式如下:

    • ( 做出一些与这个问题无关的重要改变 )

    • 切换到以前的回购版本
    • ( 自动/刷新/重新生成运行正常 )

    我认识到,问题可能是由于 Java Builder没有生成我的 war/WEB-INF/classes/ 文件夹 . 在让它构建我的项目的过程中,以下内容并没有起到跟踪的作用:

    • 禁用/重新配置验证器、建造者、刻面(直到只有Java建造者/刻面)
    • 重命名 persistence.xml 或者以各种方式编辑

    这对它没有帮助,就好像某些内部状态无法更改一样。

    推荐文章