I want to add 3rd party external jar into my maven repository. My project is in Spring Boot.
Error :
`Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner
.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.lang.NoClassDefFoundError: com/omnesys/omne/om/OMNM
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at com.omnesys.nestq.classes.ClassNestQ12.<init>(ClassNestQ12.java:28)
at com.omnesys.nestq.classes.NestControl.<init>(NestControl.java:39)
at orion.ibclient.OmnesysJAPI.<init>(OmnesysJAPI.java:69)
at orion.TradingProgram.connectToNest(TradingProgram.java:452)
at orion.TradingProgram.main(TradingProgram.java:90)
at com.orion.main.OrionController.loadPrperty(OrionController.java:39)
at com.orion.main.NestOrionApplication.main(NestOrionApplication.java:21
)
... 8 more
Caused by: java.lang.ClassNotFoundException: com.omnesys.omne.om.OMNM
at java.lang.ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 19 more`
I had done following things but still I am getting the same error.
NOTE : It working for other jar but not worked only for this jar. Like for DealerSample.jar its working but not working for this jar. You can see the difference in below picture. When I added the same jar in Simple java project through Build path its working but not in Spring Boot project.
Add external jar : https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
: Added my jar to .m2 folder and add dependancy into maven.
Maven Command : mvn install:install-file -Dfile=D:\Vijay\Jars\OmneVerse.15.0.0.0.jar -DgroupId=com.orion -DartifactId=OmneVerse -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true
Pom.xml:
<dependencies>
<dependency>
<groupId>com.orion</groupId>
<artifactId>OmneVerse</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
My Project Libs structure :
Why not try Nexus Repository Manager?
Though this approach may be long and complex. But I think it is the best and lasting solution to your problem. I have used it many times and find it very helpful.
Related
I'm trying to create a jar file of my simple java gui application. I'm using Intellij IDEA and maven.
I have imported Mig Layout as a maven dependency, when I run the program inside Intellij IDEA everything works fine, but when I create a jar by doing mvn clean install or mvn clean package, although maven says BUILD SUCCESSFUL, when I try to open the jar file I get the following Stacktrace (I believe it's a stack trace). The image Stacktrace
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: net/miginfocom/swing/MigLayout at BotGui.<init>(BotGui.java:29) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: net.miginfocom.swing.MigLayout at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 15 more
this is my dependencies in maven.
<?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.ptcontact.testdiscord</groupId>
<artifactId>Discord_Bot</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.miglayout</groupId>
<artifactId>miglayout-swing</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>3.8.0_436</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>jcenter</id>
<name>jcenter-bintray</name>
<url>https://jcenter.bintray.com</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<target>8</target>
<source>8</source>
</configuration>
</plugin>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>BotGui</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
</plugins>
</build>
</project>
Yes I have tried out version 5.0, 4.2 and 5.2.
Additionally, I have tried to add miglayout-core as a dependency as well, but that didn't change anything.
I Resolved the problem!
Like #CrazyCoder said, I needed to create a Fat Jar, in other words I needed to actually include the dependencies inside my jar file. Because I'm a beginner I thought that maven did that for you automatically, oh well.
To create a fat jar, I followed this guide:
http://tutorials.jenkov.com/maven/maven-build-fat-jar.html
Here is the situation.
I am developing a GUI Client for (historically) CLI based processes. These processes are each under a Maven Project in Eclipse. My GUI is a separate Eclipse Maven Project. The GUI Project references the other projects in its pom.xml, the mvn package doesn't fail, yet when I run the project's ...-jar-with-dependencies.jar I get a NoClassDefFoundError for a child's project class.
Here is my pom.xml
<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>
<artifactId>proto-xml-validator</artifactId>
<organization>
<name>SGcib</name>
<url>https://cib.societegenerale.com/en/</url>
</organization>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.sgcib.bacardi.tools.gui.ProtoXMLValidatorGui</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.miglayout/miglayout-swing -->
<dependency>
<groupId>com.miglayout</groupId>
<artifactId>miglayout-swing</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>idea</groupId>
<artifactId>ideaToolsUtils</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>bacardi</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>pnl-loader</artifactId>
</dependency>
</dependencies>
<groupId>bacardi</groupId>
<version>0.0.1-SNAPSHOT</version>
</project>
And here is the stack trace
$ java -jar target/proto-xml-validator-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: idea/file/loader/runner/ValuationBVLoaderRunner
at com.sgcib.bacardi.tools.gui.ProtoXMLValidatorGui.initialize(ProtoXMLValidatorGui.java:55)
at com.sgcib.bacardi.tools.gui.ProtoXMLValidatorGui.<init>(ProtoXMLValidatorGui.java:33)
at com.sgcib.bacardi.tools.gui.ProtoXMLValidatorGui$1.run(ProtoXMLValidatorGui.java:127)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: idea.file.loader.runner.ValuationBVLoaderRunner
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
The class that triggers the NoClassDefFoundError is located under the pnl-loader artifactId in the bacardi groupId.
I have already set the scope to compile for the Project dependencies.
Does anyone know what I might be doing wrong ?
Thanks in advance.
Solution to my problem:
The thing was that, although my Eclipse Maven Project had the correct dependency references, it couldn't properly package them in the JAR. Indeed, a project dependency is of no use to Maven (which doesn't know what an Eclipse project is, ofc). Maven goes looking for compiled JARs in his repositories. That's what #aka-one pointed out in the comments. I had to mvn clean install the several projects that were necessary to build in order to finally package my project.
a Project of mine using Commons Chain works fine, when i run it in the IDE.
Now i tried to package it with maven.
I used the following pom.xml:
<build>
<finalName>NAME</finalName>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>main.Main</mainClass>
</manifest>
</archive>
</configuration>
<version>2.6</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
<version>3.3</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>commons-chain</groupId>
<artifactId>commons-chain</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
</dependencies>
As you can see i added the Main Class to my manifest and specified the Dependencies to use.
The package process runs throught, but when i start the jar it says:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/ch
ain/impl/ChainBase
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at main.Main.main(Main.java:24)
Where does this error come from/what do i need to change in my config file?
Greetings,
Nicolas
You need to specify a classpath that has the jar files for your dependencies, something like java -cp=libs -jar main.jar where libs contains the dependency jar files. Maven will set that up for you with the maven-exec-plugin: mvn exec:java -DmainClass=main.Main. Maybe what you want is to have Maven create an "uber jar" that includes all of the class files for your dependencies so that java -jar main.jar just works. Use the maven-assembly-plugin or the maven-shade-plugin to create one. See What is an uber jar?.
Maven doesn't add the classpath to a jar by default.
You need to tell maven-jar-plugin to do that by adding an addClasspath entry to its configuration/archive block.
<addClasspath>true</addClasspath>
(this should be immediately before or after the mainClass line)
A simple Cassandra client app using netflix astyanax driver is built in Eclipse. Here is the pom.xml file:
<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>CCL1</groupId>
<artifactId>CCL10</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>CassandraCL1</name>
<description>Cassandra Client 1</description>
<dependencies>
<dependency>
<groupId>com.netflix.astyanax</groupId>
<artifactId>astyanax</artifactId>
<version>1.56.44</version>
</dependency>
</dependencies>
</project>
The app works fine when started from Eclipse. But when the jar file is copied to an external machine it fails to start with the following exception:
ubuntu#ip-172-31-31-41:~/tmp$ java -cp ./CCL10-0.0.1-SNAPSHOT.jar AppCCL1
Exception in thread "main" java.lang.NoClassDefFoundError: com/netflix/astyanax/connectionpool/exceptions/ConnectionException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.netflix.astyanax.connectionpool.exceptions.ConnectionException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more
The external machine is Amazon t1.micro Ubuntu-12 instance. The only software installed there is Oracle’s Java Runtime Environment 1.7.
It looks like some dependency is missing, but I cannot even see the name of the missing class.
Why did Maven fail to insert some dependency in jar? How do I troubleshoot and resolve such a problem?
It turns out Maven does not include all the dependencies in jar. (I assumed Maven does this automatically). Including all dependencies in jar is explained here:
How can I create an executable JAR with dependencies using Maven?
So I solved the problem by adding the following fragment in my xml file:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>AppCCL1</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
I am attempting to use Joda-Time with my bukkit plugin, however I am running into ClassNotFoundException and a NoClassDefFoundError.
I am using eclipse and have added it to my Build Path, and modified my Class-Path variable in my MANIFEST in the jar (and then adding the jar to a lib folder outside of my jar file), as well as tried to add the joda-time jar files in my jar file.
So make myself a bit more clear... The ClassNotFoundException shows up, when I add the files manually to my jar the NoClassDefFoundError shows up.
I've tried converting my project to maven (via eclipse) and added joda-time as a dependency to the pom.xml, but I cant seem to get that to work either (Maybe I'm doing something wrong).
If you need anymore information please ask. I'm not sure what else to include.
Thanks for any help you can give me.
java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant
at com.**********.plugin.UMSBase.registerEvents(UMSBase.java:46)
at com.***********.plugin.UMSBase.onEnable(UMSBase.java:22)
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
at org.bukkit.craftbukkit.v1_5_R2.CraftServer.loadPlugin(CraftServer.java:282)
at org.bukkit.craftbukkit.v1_5_R2.CraftServer.enablePlugins(CraftServer.java:264)
at net.minecraft.server.v1_5_R2.MinecraftServer.j(MinecraftServer.java:303)
at net.minecraft.server.v1_5_R2.MinecraftServer.e(MinecraftServer.java:282)
at net.minecraft.server.v1_5_R2.MinecraftServer.a(MinecraftServer.java:242)
at net.minecraft.server.v1_5_R2.DedicatedServer.init(DedicatedServer.java:150)
at net.minecraft.server.v1_5_R2.MinecraftServer.run(MinecraftServer.java:381)
at net.minecraft.server.v1_5_R2.ThreadServerApplication.run(SourceFile:573)
Caused by: java.lang.ClassNotFoundException: org.joda.time.ReadableInstant
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader.java:80)
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:53)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 13 more
Did you put Joda Time's jar file in the same folder as craftbukkit.jar.
I'm not sure if this will fix the problem.
Just add to build plugins maven-shade-plugin, which inserts Joda Time to plugin jar, so the classes will be found at runtime.
Into your pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>jar-with-dependencies</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Then use name-with-dependencies.jar as your plugin file.