The problem
So far, Eclipse has exported IvyDE managed libraries into a runnable JAR file, but I'm not sure why it has stopped working recently.
What's wrong? How can I fix the issue?
ivy.xml
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation= "http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="com.example" module="eclipse-ivyde-export-issue" />
<dependencies>
<dependency org="org.json" name="json" rev="20220320"/>
</dependencies>
</ivy-module>
Steps for reproducing the issue
Clone the project:
git clone [email protected]:haba713/eclipse-ivyde-export-issue.git
Import the cloned project into Eclipse workspace.
Right-click the class
src/com.example/Main.java
in the project tree and choose Run as → Java Application. See the output:{"key":"value"}
.Right-click the project and choose Export → Java → Runnable JAR file.
Choose the launch configuration for the class
com.example.Main
and Library handling: [x] Extract required libraries into generated JAR. Click Finish.Try to run the generated JAR file:
$ java -jar eclipse-ivyde-export-issue.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject at com.example.Main.main(Main.java:8) Caused by: java.lang.ClassNotFoundException: org.json.JSONObject at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 more
Environment
- Eclipse 2022-06 M2 (4.24.0 M2)
- IvyDE 2.2.0.final-201311091524-RELEASE
- OpenJDK 17.0.3 7-Debian-1deb11u1
- Debian GNU/Linux 11 (Bullseye)
Eclipse 2020-06 with OpenJDK 8 works fine
I tested the same project with Eclipse 2020-06 and OpenJDK 8. JAR export gives a warning "This operation repacks referenced libraries" and IvyDE managed classes are included into the generated JAR file.
(The question was posted also to Eclipse Community Forums.)
CodePudding user response:
Workaround
I think that this is a JDT or IvyDE bug. Workaround is to use JRE System Library 1.8 instead of 17. See the note at the end of README for more information.