2013-05-03 19 views
5

Ho provato a configurare il file pom.xml per l'applicazione Spring 3 e Hibernate 3.6. La parte rilevante della pom.xml assomiglia a questo:Configura pom.xml per ibernazione 3.6

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

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.6.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.17.1-GA</version> 
    </dependency> 
    <dependency> 
     <groupId>asm</groupId> 
     <artifactId>asm-all</artifactId> 
     <version>2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>antlr</groupId> 
     <artifactId>antlr</artifactId> 
     <version>2.7.7</version> 
    </dependency> 

Tuttavia, se non includo javassist.jar biblioteca direttamente al mio buildpath come External jar, continuo a ricevere java.lang.ClassNotFoundException. C'è qualcosa di sbagliato nel mio pom.xml, perché non scarica questa dipendenza durante la costruzione del progetto?

risposta

4

Provare hibernate-entitymanager anziché hibernate-core.

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

Questo includerà tutte le dipendenze necessarie in modo transitorio. Controlla la gerarchia delle dipendenze dei soccorritori dopo aver apportato questa modifica.

BTW l'ultima versione disponibile di ibernazione in Maven centrale è 4.1.18

+0

quindi se lo cambierò in 'hibernate-entitymanager', allora posso cancellare tutte le altre dipendenze, che sono sotto quella dipendenza? – Dworza

+2

sì, entitymanager aggiungerà core, javassisst e altri necessari per Hibernate. Si noti che saranno versioni coerenti –

1

java.lang.ClassNotFoundException dovrebbe menzionare anche il nome della classe che non è stata trovata.

  1. Prima si verifica che il jar che si sta tentando di copiare venga copiato nel percorso di generazione o meno.

  2. Se 1 è sì, quindi espandere javassist-3.17.1-GA.jar per verificare se il file di classe mancante per il quale è presente l'eccezione è presente o meno.

Il vaso esterno che risolve i problemi, cercare di scoprire la sua versione, forse si può ottenere da file MANIFEST.MF di quel vaso.

Potrebbe essere stato rifattorizzato qualcosa che sta causando il problema.

1
<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.2.0.Final</version> 
    </dependency>   
    <dependency> 
     <groupId>org.hibernate.common</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>4.0.1.Final</version> 
     <classifier>tests</classifier> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency>  
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.0.1.Final</version> 
    </dependency>  
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.0.0.GA</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.logging</groupId> 
     <artifactId>jboss-logging</artifactId> 
     <version>3.1.0.CR2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.4</version> 
    </dependency>