Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Facing NoClassDefFoundError despite jar being in classpath (dynamic compilation) #31

Open
LuPev opened this issue Nov 21, 2020 · 0 comments

Comments

@LuPev
Copy link

LuPev commented Nov 21, 2020

In a tomcat server, at run time, I am reading java class files and compiling them dynamically using InMemoryJavaCompiler.
Code Sample -

InMemoryJavaCompiler.newInstance()
                       .useOptions("-parameters", 
                          "-classpath", sb.toString(),  
                          "-Xlint:unchecked")
                       .compile(sourceCodeClassName,
                          sourceCode.toString());

Here sb (Stringbuilder) indicates the jars read from WEB-INF/lib directory separated by a colon.
The code works in the following scenarios :
1. If the above compilation code is kept in a standalone class file & the relevant libraries are set in the classpath, the compilation from a bash script was successful.
2. I printed the jar files i.e. I printed sb value separately & took a copy of it. I manually ran javac -classpath <sourceCode.java> in the terminal. The compilation was successful.

The code is not working in the following scenarios :

a. When the above code snippet is added as a stand alone program in IDE(Eclipse), I faced NoClassDefFound error for the interface which the sourceCode was implementing.

b. In Tomcat, the relevant jar is present in contextName/WEB-INF/lib/ and in addition to that the jar is added in -useOptions classpath. Even then, I am facing NoClassDefFound error for the the interface the sourceCode was implementing.

Note : There are no duplicate copies of the jar or multiple versions of the jar present in the lib directory or the classpath value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant