2016-11-05 1 views
0

ich das Folgeproblem habe:Maven nicht exportieren persistence.xml (PersistenceException: Nein Persistence Provider für EntityManager)

ich eine Anwendung in drei Schichten unterteilt erstellt habe, jede Schicht sein eigenes Maven Projekt hat:

· Persistenz-Schicht hat nur Entitäten und DAO-Klassen

· Domain-Schicht die bussiness Klassen und WebServices hat

· UI-Ebene

das Web hat

Jede Schicht mit Maven verwaltet wird, und Domain hängt von Persistenz-Schicht

Wenn ich die Persistenz-Schicht laufen, alles gut funktioniert, wie es sollte, (Lauf JUnit-Test)

Aber wenn ich hinzufügen, die Abhängigkeit in Domänenebene kann nicht ausgeführt werden, wenn eine PersistenceException ausgelöst wird. Es scheint, als ob maven die Persistenz nicht in das Domänenprojekt exportiert.

Dies ist die POM für Persistence Schicht:

<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>gamerscreed.rocketstats</groupId> 
<artifactId>RocketStatsCore</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<name>RocketStatsCore</name> 
<dependencies> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.40</version> 
    </dependency>  
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.2.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.3.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency> 

</dependencies> 
<build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src</directory> 
      <includes> 
       <include>META-INF/persistence.xml</include> 
      </includes> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Und dies ist die pom für Domain-Schicht:

<?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>gamerscreed.rocketstats</groupId> 
<artifactId>RocketStatsDomain</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>RocketStatsDomain</name> 
<description>Demo project for Spring Boot</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.5.RELEASE</version> 
    <relativePath /> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>gamerscreed.rocketstats</groupId> 
     <artifactId>RocketStatsCore</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>gamerscreed.profiler</groupId> 
     <artifactId>GamersCreedShared</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 

</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>gamerscreed.rocketstats</groupId> 
      <artifactId>RocketStatsCore</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Und hier ist die Ausnahme ausgelöst:

org.springframework.beans.factory.BeanCreationException: Fehler beim Erstellen von Bean mit dem Namen 'playerBusinessLayer' in der Datei [C: \ Users \ Xelit3 \ Documents \ Eclipse-Arbeitsbereich \ git \ GamersCreed \ RocketStatsDomain \ target \ classes \ gamerscreed \ rocketstats \ domain \ implementation \ PlayerBusinessLayer.class]: Instanziierung von Bean fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.beans.BeanInstantiationException: Fehler beim instantiieren [gamerscreed.rocketstats.domain.implementation.PlayerBusinessLayer]: Konstruktor hat Ausnahme ausgelöst; verschachtelte Ausnahme ist javax.persistence.PersistenceException: Nein Persistence Provider für EntityManager RocketStats namens

Ich sehe habe this thread aber wir haben hier nichts half mir:

Vielen Dank im Voraus

EDIT: Hinzugefügt persistence.xml :

<?xml version="1.0" encoding="UTF-8" ?> <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" xmlns="http://java.sun.com/xml/ns/persistence"> 
<persistence-unit name="RocketStats" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

    <class>gamerscreed.rocketstats.model.dto.Match</class> 
    <class>gamerscreed.rocketstats.model.dto.MatchResultPlayer</class> 
    <class>gamerscreed.rocketstats.model.dto.MatchResultPlayerPK</class> 
    <class>gamerscreed.rocketstats.model.dto.MatchType</class> 
    <class>gamerscreed.rocketstats.model.dto.Player</class> 
    <class>gamerscreed.rocketstats.model.dto.Result</class> 
    <class>gamerscreed.rocketstats.model.dto.Role</class> 
    <class>gamerscreed.rocketstats.model.dto.Team</class> 
    <class>gamerscreed.rocketstats.model.dto.Tournament</class> 

    <validation-mode>AUTO</validation-mode> 

    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.user" value="chustasoft" /> 
     <property name="javax.persistence.jdbc.password" value="chustaK4" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/cs_rocketstats" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.max_fetch_depth" value="3" /> 
     <property name="show_sql" value="true"></property> 
    </properties> 

</persistence-unit> 

+0

Define "Maven exportiert nicht persistence.xml". Wenn Sie _persistence.xml_ irgendwo unter src/main/resources/META-INF platzieren, dann ist es sichtbar, wenn Sie eine Anwendung mit Maven ausführen.Warum Dinge in Annahme ("es scheint wie"), wenn Sie Maven mit --debug laufen und sehen, wo die Dinge sind –

+0

Danke für Ihr Interesse, ich mache von Eclipse, vielleicht habe ich nicht genug Wissen, aber ich habe nicht Ich verstehe nur, was du mit "run maven with debug" sagen willst. Ich debugge gerade die App und das ist das Problem, das ich habe: S Danke –

+0

Ich muss sagen, dass _persistence.xml_ es unter src \ META-INF ist, aber es ist wie es jetzt funktioniert. Wenn der Weg ein Problem ist, wie kann ich ändern, ohne zu arbeiten? Nochmals vielen Dank –

Antwort

1

Sehen Sie wie pe rsistence provider fehlt/nicht im Klassenpfad von persistence.xml gefunden.

<provider>PersistenceProviderImpl</provider> 
<jta-data-source>..</jta-data-source> 
<non-jta-data-source>..</non-jta-data-source> 
<class></class> 

<properties> 
    <property name="openjpa.jdbc.SynchronizeMappings" value="validate" />    
</properties> 

+0

Vielen Dank für Ihre Antwort, aber ich habe den Anbieter in der persistence.xml deklariert. Wie ich bereits sagte, wenn ich den Test von Infraestructure-Ebene ausführen, funktioniert alles gut, aber schlägt fehl, wenn ich von Domain-Ebene ausgeführt werde. Ich habe meine Frage bearbeitet und die persistence.xml hinzugefügt. Findest du etwas Schlechtes? Vielen Dank für Ihre Antwort und Ihr Interesse –

+0

Ich muss sagen, dass persistence.xml es unter src \ META-INF ist, aber es ist, wie es jetzt funktioniert. Wenn der Weg ein Problem ist, wie kann ich ändern, ohne zu arbeiten? Nochmals vielen Dank –

+0

Infrastruktur-Layer sollte Zugriff auf die realen Anbieter von src/main/resources ausgesetzt src ---- Haupt -------- Ressourcen -------------- ---- META-INF/persistence.xml -------- java/Code Domain/lokale Ebene sollte den Test Anbieter von src/main/resources wie RESOURCE_LOCAL src ausgesetzt Zugang - --test -------- Betriebsmittel ------------------ META-INF/persistence.xml -------- java/Ihr Code Hoffe das klärt Ihre Zweifel. Wenn Sie unter src/META-INF hinzugefügt haben, ist es sowohl für die Domäne als auch für die Infrastrukturschicht verfügbar. – sahoora

Verwandte Themen