ошибка среды выполнения java NoClassDefFoundError

#java

#java

Вопрос:

парень. У меня вопрос об ошибке связывания среды выполнения java: я пытаюсь скомпилировать пример кода JasperReport в centos.

моя настройка:

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

и ошибки:

 ~/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
 

Я не установил глобальный путь к классу
// 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}

lt;

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


lt;

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!!! ...");
   }
}
 

Я не понимаю, почему я все еще получаю эту ошибку после того, как я добавил apache commons jar в путь к классу. Надеюсь, кто-нибудь сможет мне помочь. большое спасибо.

Ответ №1:

Я предполагаю, что имя commons.logging-1.1.3.jar файла неверно. Так и должно быть commons-logging-1.1.3.jar . (не с Точкой)

Комментарии:

1. все та же проблема после изменения этого.

2. удалите кавычки из classpath. Они находятся в неправильном положении.