2014-02-26 56 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