2017-10-10 187 views
0

我有一個獨立的Java應用程序,它使用jcifs庫進行SMB操作。獨立應用程序使用彈簧引導。此應用程序工作正常,並能夠滿足要求。春季啓動嵌入式tomcat不啓動jcifs smb庫

我必須將此獨立應用程序轉換爲寧靜的服務。因此我使用了嵌入式tomcat的spring boot starter。轉換後的應用程序編譯得很好,但是當我啓動應用程序時,嵌入式tomcat無法啓動並出現以下錯誤。 我已經縮小了包含jcifs庫的問題。當我刪除它時,嵌入式tomcat啓動正常,當我包含它時,會得到下面的錯誤。 的JCIFS依賴如下: 編譯組:「JCIFS」,名稱:「JCIFS」版本:「1.3.17」

請讓我知道可能是什麼問題或任何指針。我在非常緊張的時間表上運行,因此任何幫助/指示將非常感謝。

錯誤是: 2017年10月9日22:50:50.189 INFO 1780 --- [主要] org.apache.catalina.core.StandardEngine:啓動Servlet引擎:的Apache Tomcat/8.5.5 2017- 10-09 22:50:50.470錯誤1780 --- [cat-startStop-1] org.apache.catalina.core.ContainerBase:子容器在啓動過程中失敗

java.util.concurrent.ExecutionException:org。 apache.catalina.LifecycleException:未能在java.util.concurrent.FutureTask.report(FutureTask.java:122)[Na:1.8.0_144]上啓動組件[StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext []] at java.util.concurrent.FutureTask.get(FutureTask.java:192)[na:1.8.0_144] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:911)〜[tomcat-embed-core-8.5.5.jar:8.5.5] at org.apache.catalina.core.StandardHost。 startInternal(StandardHost.java:890)[tomcat-embed-core-8.5.5.jar:8.5.5] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)[tomcat-embed- core-8.5.5.jar:8.5.5] at org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1403)[tomcat-embed-core-8.5.5.jar:8.5.5 ] at org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1393)[tomcat-embed-core-8.5.5.jar:8.5.5] at java.util.concurrent.FutureTask。運行(FutureTask.java:266)[na:1.8.0_144] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)[na:1.8.0_144] 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)[na:1.8.0_144] at java.lang.Thread.run(Thread.java:748)[na:1.8.0_144] 原因:org.apache.catalina.LifecycleException:無法在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)上啓動組件[StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext []] 。 [tomcat-embed-core-8.5.5.jar:8.5.5] ... 6通用幀被遺漏 引起:org.apache.catalina.LifecycleException:無法啓動組件[Pipeline [StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext []]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)[tomcat-embed-core-8.5.5.jar:8.5.5] at org。 apache.catalina.core.StandardContext.startInternal(StandardContext.j ava:5099)〜[tomcat-embed-core-8.5.5.jar:8.5.5] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)[tomcat-embed-core-8.5 .jar:8.5.5] ...忽略6個常見框架 引起:org.apache.catalina.LifecycleException:未能在組織中啓動組件[org.apache.catalina.authenticator.NonLoginAuthenticator []] 。 apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)[tomcat-embed-core-8.5.5.jar:8.5.5] at org.apache.catalina.core.StandardPipeline。startInternal(StandardPipeline.java:170)〜[tomcat-embed-core-8.5.5.jar:8.5.5] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)[tomcat-embed -core-8.5.5.jar:8.5.5] ...省略8個常見幀 引起來自:java.lang.NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; at org.apache.catalina.util.LifecycleBase org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1122)〜[tomcat-embed-core-8.5.5.jar:8.5.5] 。開始(LifecycleBase.java:150)[tomcat-embed-core-8.5.5.jar:8.5.5] ...省略了10個常用幀

下面是gradle文件。我正在使用gradle 2.10.0版本。

buildscript { 
    repositories { 
     mavenCentral() 
     maven { url "http://repo1.maven.org/maven2" } 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE") 
     classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2.1" 
    } 

} 
// Apply the java plugin to add support for Java 
apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'spring-boot' 
apply plugin: "org.sonarqube" 
apply plugin: 'jacoco' 

jar { 
    baseName = 'connectorservice' 
    version = '0.1.0' 
    manifest { 
     attributes 'Main-Class': 'com.uu.ff.connectorservice.main.Application' 
    } 
} 


repositories { 
    mavenCentral() 
    maven { url "http://repo1.maven.org/maven2" } 
} 


sourceCompatibility = 1.8 
targetCompatibility = 1.8 


// In this section you declare the dependencies for your production and test code 
dependencies { 

    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('org.springframework.boot:spring-boot-starter-aop') 
    compile('org.springframework:spring-aspects') 
    compile("org.springframework.boot:spring-boot-starter-data-mongodb") 

    compile group: 'commons-io', name: 'commons-io', version: '2.5' 
    compile group: 'org.apache.commons', name: 'commons-vfs2', version: '2.1' 
    compile group: 'de.odysseus.staxon', name: 'staxon', version: '1.3' 

    testCompile("junit:junit") 
    testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.6.4' 
    testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.6.4' 
    compile('org.springframework.boot:spring-boot-starter-test') 
    compile group: 'commons-dbcp', name: 'commons-dbcp', version: '1.4' 
    compile group: 'jcifs', name: 'jcifs', version: '1.3.17' 

} 
+0

Ueslei Lima提供的解決方案完全按照我想要的方式工作。非常感謝。我無法將答覆標記爲答案。 – pankajkk

回答

0

你只需要做排除JCIFS庫中的「servlet的API」的依賴,它與tomcat的默認servlet API衝突。 在行家它會是這樣的:使用彈簧集成-SMB庫時

<dependency> 
    <groupId>org.codelibs</groupId> 
    <artifactId>jcifs</artifactId> 
    <version>1.3.18.2</version> 
     <exclusions> 
      <exclusion> 
       <groupId>javax.servlet</groupId> 
       <artifactId>servlet-api</artifactId> 
      </exclusion> 
     </exclusions> 
</dependency> 

排除提供良好服務也。