0

guy. I have a question about java runtime linking erorr: I try to compile a JasperReport Example code in centos.

my set up:

/opt/jasperreports-5.6.0
/opt/apache-ant-1.9.4
/opt/commons-logging-1.1.3/commons-logging-1.1.3.jar

and errors:

~/test/1 localhost $ make run
javac -cp "/opt/jasperreports-5.6.0/dist/jasperreports-5.6.0.jar:." JasperReportCompile.java
java -cp "/opt/commons-logging-1.1.3/commons-logging-1.1.3.jar:"/opt/jasperreports-5.6.0/dist    /jasperreports-5.6.0.jar:."" JasperReportCompile
Compiling Report Design ...
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:81)
    at net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties(JRPropertiesUtil.java:99)
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties(DefaultJasperReportsContext.java:94)
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.<init>(DefaultJasperReportsContext.java:71)
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.<clinit>(DefaultJasperReportsContext.java:59)
    at net.sf.jasperreports.engine.JasperCompileManager.getDefaultInstance(JasperCompileManager.java:197)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:539)
    at JasperReportCompile.main(JasperReportCompile.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 8 more
make: *** [run] Error 1

I didn't not set global CLASSPATH // Makefile

JAVAC := javac
JAVA  := java
JAVA_COMPILE_LIBS = "/opt/jasperreports-5.6.0/dist/jasperreports-5.6.0.jar:."
JAVA_RUNTIME_LIBS = "/opt/commons-logging-1.1.3/commons.logging-1.1.3.jar:${JAVA_COMPILE_LIBS}"
TARGET := JasperReportCompile

.PHONY: clean all run

all: ${TARGET}

${TARGET}: ${TARGET}.java

%:%.java
    ${JAVAC} -cp ${JAVA_COMPILE_LIBS} $<

run: ${TARGET}
    $(JAVA) -cp ${JAVA_RUNTIME_LIBS} $<

clean:
    rm -rf *.class

// JasperReportCompile.java

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;

public class JasperReportCompile {

   public static void main(String[] args) {
      String sourceFileName = "~/test/1/a.xml";
      System.out.println("Compiling Report Design ...");
      try {
         JasperCompileManager.compileReportToFile(sourceFileName);
      } catch (JRException e) {
         e.printStackTrace();
      }
      System.out.println("Done compiling!!! ...");
   }
}

I don't understand why I am still getting this error after I added the apache commons jar to class path. Hope someone can help me out. thanks a lot.

1 Answer 1

3

I guess the filename commons.logging-1.1.3.jar is wrong. It must be commons-logging-1.1.3.jar.(not with Point)

Sign up to request clarification or add additional context in comments.

2 Comments

still the same problem after changing that.
remove the quotes from classpath. Thay are on wrong Position.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.