Bug 145526 - NoClassDefFound Error in Java Macro when trying to load another class
Summary: NoClassDefFound Error in Java Macro when trying to load another class
Status: RESOLVED DUPLICATE of bug 145527
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Writer (show other bugs)
(earliest affected) release
Hardware: x86-64 (AMD64) Windows (All)
: medium normal
Assignee: Not Assigned
Depends on:
Reported: 2021-11-03 15:23 UTC by Alex R
Modified: 2021-11-03 18:18 UTC (History)
0 users

See Also:
Crash report or crash signature:


Note You need to log in before you can comment on or make changes to this bug.
Description Alex R 2021-11-03 15:23:03 UTC
When I try to execute a Java Macro which loads any other class despite the one first loaded by the URLClassLoader, I get a NoClassDefFound Error.
I searched before filing this bug if it is already here. I could not find it, in case I overlooked it, my apologies. 

Steps to Reproduce:
1. Go to <LOInstall Folder>\share\Scripts\java
2. Duplicate directory HelloWorld, e. g. to HelloWorldTest
3. Open the new directory, in there is HelloWorld.java
4. Adapt HelloWorld.java as follows:
package org.libreoffice.example.java_scripts;

import com.sun.star.script.provider.XScriptContext;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextRange;
import com.sun.star.text.XText;
 *  HelloWorld class
public class HelloWorld {
    public static void printHW(XScriptContext xSc) {

        // getting the text document object
        XTextDocument xtextdocument = (XTextDocument) UnoRuntime.queryInterface(
                                          XTextDocument.class, xSc.getDocument());
        XText xText = xtextdocument.getText();
        XTextRange xTextRange = xText.getEnd();
        xTextRange.setString("Hello World (in Java)");
	LoadMe lm = new LoadMe();  // the actual change
	xTextRange.setString("Test String: " + lm.getText());
    }// printHW


5. create a new java class file, LoadMe.java e. g. as follows:

package org.libreoffice.example.java_scripts;

public class LoadMe {
	public LoadMe() {
	 public String getText() {
		 return "Success";

6. Compile the java files, e. g. in a dos command window after changing to the right path:

SET OOO=c:\progra~1\LibreOffice\program\classes
SET OOOPATH=%OOO%\juh.jar;%OOO%\jurt.jar;%OOO%\ridl.jar;%OOO%\unoil.jar
javac -cp "%OOOPATH%" LoadMe.java HelloWorld.java 

7. create a new path in your current HelloWorldTest directory
all of those subfolders have to be created according to the java package name of the created class files


8. copy the class files created by compilation to 


9. Update the jar file with the new classes, e, g.: 

jar -cvf HelloWorld.jar org

from the command window in the HelloWorldTest folder
If everything is done right, the parcel descriptor should still fit.

10. Now start Writer

11. Go to 
Tools -> Macros -> Run Macro

12. Search the available macros HelloWorldTest in the LibreOffice list and execute it

Actual Results:
NoClassDefFoundError. I can debug until the point LoadMe is called, so HelloWorld is executed but LoadMe is not on the classpath.

Expected Results:
LoadMe is executed and the String in Writer changes from "Hello World (in Java)" to "Test String: Success"

Reproducible: Always

User Profile Reset: Yes

Additional Info:
The issue seems with ScriptProviderForJava.java
Comment 1 Michael Warner 2021-11-03 17:06:07 UTC
Is there a distinction between this bug and bug 145527? If not, then please mark one of them as a duplicate.
Comment 2 Alex R 2021-11-03 18:10:57 UTC

*** This bug has been marked as a duplicate of bug 145527 ***
Comment 3 Alex R 2021-11-03 18:18:33 UTC
(In reply to Michael Warner from comment #1)
> Is there a distinction between this bug and bug 145527? If not, then please
> mark one of them as a duplicate.

Thanks for the hint. I added a comment about the java version used, somehow that must have reposted the bug, sorry for that. I hope that does not happen again now when I press save changes.