Java.lang.NoClassDefFoundError: com / google / gson / Gson

I noticed a strange problem. I can run my test cases using Junit, but when I run using maven One of the test cases fails. He complains that the Gson class class was not found.

I can see the Gson jar in the Maven dependencies.

Therefore, I doubted that the classpath does not include Gson. So I ran maven with -X and noticed some tips.

[DEBUG] Could not find metadata com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\ra\.m2\repository) [DEBUG] Skipped remote update check for com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml, locally cached metadata up-to-date. [DEBUG] Could not find metadata com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\ra\.m2\repository) [DEBUG] Skipped remote update check for com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml, locally cached metadata up-to-date. [WARNING] The POM for com.example.libraries:Symbology:jar:1.0.0-SNAPSHOT is invalid, transitive dependencies (if any) will not be available: 2 problems were encountered while building the effective model for com.example.libraries:Symbology:1.0.0-SNAPSHOT [ERROR] 'dependencies.dependency.artifactId' for ::jar is missing. @ [ERROR] 'dependencies.dependency.groupId' for ::jar is missing. @ 

I have a project that depends on the Symbology project, and this, in turn, uses Gson. But now from this log I see that transient dependencies are not included. Therefore, the Gson class was not found.

Here is a symbolic pom:

 <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.example.libraries</groupId> <artifactId>Symbology</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Symbology</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> 

Here is my project that evokes symbolism:

 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.example.libraries</groupId> <artifactId>FGF</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <distributionManagement> <snapshotRepository> <id>example.com</id> <name>example.com-snapshots</name> <url>http://example/artifactory/libs-snapshots-local</url> </snapshotRepository> </distributionManagement> <name>FGF</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>com.example.libraries</groupId> <artifactId>Category</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.example.libraries</groupId> <artifactId>Time</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.example.libraries</groupId> <artifactId>Display</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> **<dependency> <groupId>com.example.libraries</groupId> <artifactId>Symbology</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>** <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.0.BUILD-SNAPSHOT</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.apache.directory.studio</groupId> <artifactId>org.apache.commons.lang</artifactId> <version>2.6</version> </dependency> </dependencies> 

0
source share
1 answer

Figured out the problem Finally, spending a lot of time.

The problem is that I push the artifact of the symbology into the repository, this does not push the pom into the repository. Therefore, when I use the symbolic artifact as a dependency, my project cannot know what transitive dependencies are.

So, I pushed my pom into the repository along with jar, and now it can get all the dependencies.

HURRAYYYYYYYYYYYYYYYYY !!!!!!!!!!!!!!!!!!!

+1
source

Source: https://habr.com/ru/post/920076/


All Articles