4

これは、Maven によって構築された通常の JPA コンソールです。非常に厄介な例外が発生しました

java.lang.ClassNotFoundException: javax.persistence.Persistence

そのような問題についていくつかの解決策を見つけ、javaee-api lib を pom.xml に追加することを提案しています。しかし、エラーはまだjavaee-api libで立っています。

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class App 
{
    public static void main( String[] args )
    {
        // This line causes error
        EntityManagerFactory entityManagerFactory =
                    Persistence.createEntityManagerFactory("testjpa");
        // It works when I comment above line and print hello
    }
}

したがって、例外はライブラリの問題に関連しておらず、persistence.xml ファイルが問題を引き起こしている可能性があると確信しています。

ここに私のプロジェクトツリー

├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── hoan
    │   │           ├── App.java
    │   │           └── Customer.java
    │   └── resources
    │       └── META-INF
    │           └── persistence.xml
    └── test

私のpersistence.xml

<persistence-unit name="testjpa" transaction-type="RESOURCE_LOCAL">

    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

    <class>com.foo.Customer</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" 
                  value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url"
                  value="jdbc:mysql://localhost:3306/quickstart">
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="password"/>
    </properties>

</persistence-unit>

pom.xml の依存関係

<dependency>
    <groupId>org.apache.openjpa</groupId>
    <artifactId>openjpa-all</artifactId>
    <version>2.0.0</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.22</version>
</dependency>

ちなみに、私はこのスレッド「EntityManagerの永続化プロバイダーがありません」エラーをたどりましたが、これは私の問題とまったく同じですが、何も機能していないようです。

どうしたの?

更新: jar ファイルを実行するコマンド ライン

java -cp target/jpa-demo.jar com.foo.App
4

2 に答える 2

1

不足している依存関係を pom.xml に追加します

    <dependency>
      <groupId>javax.persistence</groupId>
      <artifactId>persistence-api</artifactId>
      <version>1.0</version>
    </dependency>

なぜEclipse内で実行されているのですか?

私は日食中毒者ではありませんが、クラスパスを簡単にカスタマイズでき、pom ファイルとの同期が維持されないことは知っています。そのため、Eclipse で使用されるクラスパスが Maven クラスパスと一致しない可能性が高くなります。

于 2013-02-09T13:03:43.393 に答える
0

このjarをビルドパスリンクに追加します

このようにmavenを介して依存関係を追加する方が良いですが

<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>

よろしくアンシュル

于 2013-02-12T07:05:38.600 に答える