Search code examples
eclipseclassjarivyivyde

Eclipse IvyDE managed libraries not exported into runnable JAR file


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

  1. Clone the project:

    git clone [email protected]:haba713/eclipse-ivyde-export-issue.git
    
  2. Import the cloned project into Eclipse workspace.

  3. Right-click the class src/com.example/Main.java in the project tree and choose Run as → Java Application. See the output: {"key":"value"}.

  4. Right-click the project and choose Export → Java → Runnable JAR file.

  5. Choose the launch configuration for the class com.example.Main and Library handling: [x] Extract required libraries into generated JAR. Click Finish.

  6. 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.)


Solution

  • 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.

    The chosen Launch configuration must have JDK 1.8 as a runtime environment.