Bekomme immer java.lang.NoClassDefFoundError im Frühjahr
Ich weiß wirklich nicht, was ist Los mit meinem Spring-Konfiguration. Könnten Sie mir die hand?
Mein code (vereinfachte version):
App.java:
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
ctx.close();
}
}
Config.java:
@Configuration
@ComponentScan
public class Config {
@Bean
public JdbcOperations jdbcTemplate(DataSource ds) {
return new JdbcTemplate(ds);
}
}
pom-Datei:
<properties>
<!-- Generic properties -->
<java.version>1.6</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring -->
<spring-framework.version>4.2.5.RELEASE</spring-framework.version>
<!-- Hibernate /JPA -->
<hibernate.version>4.2.1.Final</hibernate.version>
<!-- Logging -->
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
<!-- Test -->
<junit.version>4.11</junit.version>
</properties>
<dependencies>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- Logging with SLF4J & LogBack -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Test Artifacts -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-framework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.185</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Meine Ordner Struktur:
Nachdem ich maven Paket, als ich das Glas bekam ich:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/annotation/AnnotationConfigApplicationContext
at App.main(App.java:10)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.annotation.AnnotationConfigApplicationContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
in die Linie 10 ist die AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
Zusätzlich:
Schreibe ich den code, wenn ich war wathcing eine Feder tutorial:Spring Framework Tutorial 4: Datenbank-Programmierung mit JdbcTemplate
Und sein Quellcode ist verfügbar unter:github
Der einzige Unterschied mit dem source code ist, dass ich die MainClass in der pom-Datei.
Vielen, vielen Dank!
Mit freundlichen GRÜßEN
InformationsquelleAutor Spider | 2017-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund für dieses ist, in Ihrem Glas, das Sie haben nur Ihre Klassen, ohne irgendwelche Abhängigkeiten. Um alle Abhängigkeiten in Ihrem Glas, das Sie benötigen, um erstellen Sie eine fat-jar.
Ersetzen Sie Ihre build-block mit folgenden innerhalb pom.xml:
Nach dem ausführen von mvn clean package erhalten Sie zwei Glas in Ihrem Zielverzeichnis, das erste ist ohne die Abhängigkeit und das zweite ist mit Abhängigkeiten. Führen Sie das zweite Glas.
InformationsquelleAutor Monzurul Haque Shimul
Dem Grund, dass Sie bekommen, dass ist, weil die maven-jar-plugin nicht tatsächlich enthalten die Gläser, auf die verwiesen wird in der POM-Datei standardmäßig.
Gibt es ein paar Möglichkeiten, die Sie Sortieren können, diese Antwort scheint ziemlich umfassend.
Beachten Sie auch, dass beim Verweis auf die main-Klasse in der POM, müssen Sie die Referenz mit dem voll qualifizierten Klassennamen (
net.ubilife.spring.customerjdbc.App
).InformationsquelleAutor jas_raj
Können Sie auch ausführen, es mit Schatten zu bauen, die jar mit den Abhängigkeiten.
Einfach "Schatten:Schatten" zu den Zielen.
Beispiel:
mvn clean install Schatten:Schatten
InformationsquelleAutor mountain coder