2014-02-26 28 views
0

我想在我的java项目中使用docx4j来阅读docx文档。我正在使用Eclipse。我下载了docx4j-jar文件并将其包含在构建路径中。当运行我的测试代码,我收到此错误信息: 异常在线程 “主要” java.lang.NoClassDefFoundError:组织/ SLF4J /的LoggerFactory如何在我的项目中使用docx4j?

比我加入的log4j-1.2.17.jar,SLF4J-API 1.7。 5.jar和slf4j-log4j12-1.7.5.jar到我的项目构建路径。但我得到这个错误信息

log4j:WARN No appenders could be found for logger (org.docx4j.jaxb.Context). 
    log4j:WARN Please initialize the log4j system properly. 
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils 
at org.docx4j.openpackaging.io3.Load3.get(Load3.java:138) 
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:353) 
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:293) 
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:243) 
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:226) 
at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:162) 
at org.docx4j.Docx4J.load(Docx4J.java:176) 
at Doc4JReadDOCX.main(Doc4JReadDOCX.java:11) 

我也试着添加commons-logging-1.1.3.jar,但这并没有改变任何东西。

在我的项目中使用docx4j需要做些什么?我需要添加什么.jar文件? 感谢您的帮助! 1ceman

+0

要么使用Maven管理依赖关系,或明确添加所有的依赖在docx4j分布http://www.docx4java.org/docx4j/docx4j-3.0.1-community。 zip或从http://www.docx4java.org/docx4j/docx4j-3_0/dependencies/ – JasonPlutext

+0

我用maven来管理依赖关系,并知道它工作。非常感谢你! – Iceman

回答

0

您的错误消息是试图告诉你,你需要初始化Log4j。通常你需要告诉它打印错误消息到控制台或文件。所以,你需要建立一个属性文件,如下所示:

# Root logger option 
log4j.rootLogger=DEBUG, stdout 

# Direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

然后,创建一个由属性文件中读取初始化log4j的一个servlet。事情是这样的:

import org.apache.log4j.PropertyConfigurator; 
import javax.servlet.http.*; 
import com.mysite.*; 


public class Log4jInit extends HttpServlet 
{ 
    public void init() 
    { 
    try{ 
     String prefix = getServletContext().getRealPath("/"); 
     String file = getInitParameter("log4j-init-file"); 
     if(file != null) 
     { 
     System.out.println("Log4jInit.init - prefix + file: " + prefix + file); 
     PropertyConfigurator.configure(prefix + file);   
     } 
    } 
    catch(Exception e){e.printStackTrace();} 
    } 

    public void doGet(HttpServletRequest req, HttpServletResponse res){} 
} 

在web.xml文件中,你需要把以下内容:

<servlet> 
    <servlet-name>log4j-init</servlet-name> 
    <servlet-class>com.mysite.Log4jInit</servlet-class> 
    <init-param> 
    <param-name>log4j-init-file</param-name> 
    <param-value>WEB-INF/properties/log4j_CONSOLE.properties</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>log4j-init</servlet-name> 
    <url-pattern>/log4j-init/*</url-pattern> 
</servlet-mapping> 

希望这有助于。

0

1)您在类路径中缺少org.apache.commons.io库。 docx4j需要它。

2)取消log4j警告: 将文件log4j.properties放入根源目录(通常为src)。在这里你配置log4j。样本文件是这样的:

log4j.rootLogger=ERROR, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n 
+0

我也试过你的解决方案,但是这没有奏效。我现在使用maven作为依赖关系。谢谢你的帮助! – Iceman

+0

我也用你的log4j属性来摆脱log4j警告。谢谢! – Iceman