Jakarta ee 正确编译后,Maven项目不会执行

Jakarta ee 正确编译后,Maven项目不会执行,jakarta-ee,maven,jpa,Jakarta Ee,Maven,Jpa,我正在学习《Java_EE_6和Glassfish_3开始创建实体》一书的教程。我按照步骤一个接一个地检查google,但在执行过程中仍然有错误 因此,实体类是: package com.apress.javaee6.chapter02; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persisten

我正在学习《Java_EE_6和Glassfish_3开始创建实体》一书的教程。我按照步骤一个接一个地检查google,但在执行过程中仍然有错误

因此,实体类是:

package com.apress.javaee6.chapter02;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQuery;


@Entity
@NamedQuery(name = "findAllBooks", query = "SELECT b FROM Book b")
public class Book {

    @Id
    @GeneratedValue
    private Long id;
    @Column(nullable = false)
    private String title;
    private Float price;
    @Column(length = 2000)
    private String description;
    private String isbn;
    private Integer nbOfPage;
    private Boolean illustrations;

   //Here I put the constructor and getters and setters
   }
持久化单元是:

<?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="chapter02PU" transaction-type="RESOURCE_LOCAL">

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

<class>com.apress.javaee6.chapter02.Book</class>

<properties>
    <property name="eclipselink.target-database" value="DERBY"/>
    <property name="eclipselink.ddl-generation" value="create-tables"/>
    <property name="eclipselink.logging.level" value="INFO"/>
    <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
    <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/chapter02DB;create=true"/>
    <property name="javax.persistence.jdbc.user" value="APP"/>
    <property name="javax.persistence.jdbc.password" value="APP"/>
</properties>   
</persistence-unit>

</persistence>
maven项目的POM文件为:

<?xml version="1.0" encoding="UTF-8"?>

<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>com.apress.javaee6</groupId>
 <artifactId>chapter02</artifactId>
 <version>2.0</version>

<name>chapter02</name>
<properties>
    <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
    <eclipselink.version>2.4.0</eclipselink.version>
  </properties>
<repositories>
        <repository>
            <id>EclipseLink</id>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
        </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>javax.persistence</artifactId>
        <version>2.0.0</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbyclient</artifactId>
        <version>10.8.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.8.1.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>


<build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.0</version>
          <configuration>
              <source>1.6</source>
              <target>1.6</target>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

</project>
我得到一个例外:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named chapter02PU
意思是

org.eclipse.persistence.jpa.PersistenceProvider  
在运行时类路径中不存在。我们需要更改classpathScope参数值以进行编译


@user1881983本地回购协议是什么?O_O您的jar应该包含javax.persistence工件,但是persistence文件存在于target/classes路径中。作为编译的结果,我的目标目录的结构是:target/CLASSES/META-INF/persistence.xml和target/CLASSES/COM/APRESS/JAVAEE6/CHAPTER02/main.class和book.class。另外,eclipselink存储库位于.m2下,其路径为C:\Users\my\u name\.m2
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named chapter02PU
org.eclipse.persistence.jpa.PersistenceProvider  
mvn exec:java -Dexec.mainClass=com.apress.javaee6.chapter02.Main -Dexec.classpathScope=compile