2014-01-21 36 views
2

我創建了一個項目,它使用apache commons validations.I測試了它作爲一個項目,並且每件事都按預期工作。找不到apache的公共類 - 在添加jar之後

然後,我創建了這個項目的jar文件。我已經檢查過,apache commons validations jar也被編譯並添加(作爲依賴)到我正在構建的jar中。

然後,我已經包含了這個jar(與Maven)到其他項目,並BANG錯誤!這裏是:

java.lang.NoClassDefFoundError: org/apache/commons/validator/routines/EmailValidator 

我做錯了什麼?

這裏是堆棧跟蹤:

Jan 21, 2014 3:20:45 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [com.evappserver.servlets.RegistrationServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause 
java.lang.NoClassDefFoundError: org/apache/commons/validator/routines/EmailValidator 
    at com.evappcom.validator.Validator.emailValidator(Validator.java:29) 
    at com.evapp.protocols.BaseProtocol.emailValidation(BaseProtocol.java:124) 
    at com.evapp.protocols.RegistrationProtocol.validateRequest(RegistrationProtocol.java:57) 
    at com.evappserver.logiclayer.RegistrationLogic.registrateUser(RegistrationLogic.java:27) 
    at com.evappserver.servlets.RegistrationServlet.doGet(RegistrationServlet.java:38) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

這裏是POM文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>EvApp_Server</groupId> 
    <artifactId>EvApp_Server</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <warSourceDirectory>WebContent</warSourceDirectory> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <dependency> 
      <groupId>org.json</groupId> 
      <artifactId>json</artifactId> 
      <version>20090211</version> 
     </dependency> 
     <dependency> 
      <groupId>oro</groupId> 
      <artifactId>oro</artifactId> 
      <version>2.0.8</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.0-alpha4</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>com.evapp.code</groupId> 
      <artifactId>evappcom</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
</project> 

下面是行家樹截圖: enter image description here

這裏是包含Maven依賴關係(與我的定製罐): enter image description here

+0

@peterRader我已經添加了它。 – vlio20

+0

@peterRader我將jar添加到我的maven項目中作爲依賴項。 – vlio20

回答

0

這是我做了什麼來解決這個問題。我不知道這是否是正確的方式(我會堅持下去,直到找到更好的方式)。

我已經改變從我創建的jar到Maven項目,然後我出口它沒有阿帕奇共同驗證的依賴性罐子。將它安裝到我的本地存儲庫並將其添加到我的主項目後,我添加了jar和apache常用驗證的依賴關係。

從這裏,每件事情都起作用。

我認爲這不是一個好的解決方案,因爲它打破了面向對象的封裝想法。有可能從maven導出jar與所有的依賴關係,但據我所知,當它被添加到具有相同依賴關係的其他項目時,它可能會導致依賴項的衝突錯誤。

我很高興聽到更好的解決方案:)

-1

您需要下載Apache Commons/Lang並確保其包含在CLASSPATH中(或者如果使用IDE,請確保所有必需的庫都包含在構建配置中)。

+3

-1他正在使用maven。 –

+0

我已經在獨立項目上測試過它,它工作正常。這意味着所有的依賴關係都可以。 – vlio20

1

在我看來,「其他」項目有Apache的依賴已經和那個特定的版本沒有EmailValidator類。

+0

可能是一個背書文件夾的案例... –

+0

另一個項目沒有apache常見的驗證依賴項,如果它能幫助我添加所有「其他」項目依賴項(它可能有它(但它被刪除) – vlio20

+0

如果將jar放入'/ tomcat-xxx/endorsed'文件夾,錯誤仍然存​​在嗎? –

相關問題