2017-06-22 149 views
1

我無法mvn clean install我的項目。 我需要在戰爭中使用(未JAR)遠程JNDI,但在application.properties,其命名爲MVN期間清潔拋出錯誤安裝(因「未找到數據源JNDI名稱」)Spring Boot JNDI找不到 - 無法編譯WAR,Maven


,如果我有從遠程服務器使用jndi名稱,我無法控制,如何在WAR中編譯我的包而不查找失敗,但讓它在服務器上部署/安裝應用程序期間查找?任何暗示,或方向是非常appreicated ...


在應用道具

,我有

spring.datasource.jndi名=的jdbc/FF-應用

我有嘗試:Spring boot JNDI datasource lookup failure - Name comp/env/jdbc not found in context "java:"

試過,http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-connecting-to-a-jndi-datasource

和幾乎每一個問題,問以s tackoverflow有關遠程JNDI ..

一些錯誤:

引起:org.springframework.beans.BeanInstantiationException:無法實例[javax.sql.DataSource中]:出廠方法 '數據源' 扔例外;嵌套異常是org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException:無法查找名爲'jdbc/ff-app'的JNDI數據源;嵌套的異常是javax.naming.NoInitialContextException:需要在環境或系統屬性或applet參數中指定類名,或者在應用程序資源文件中指定類名:java.naming.factory.initial at org.springframework.beans.factory。 (SimpleInstantiationStrategy.java:189)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver。 java:588)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE] ... 69常見幀被忽略 引起:org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException:未能查找名爲'jdbc/ff-app'的JNDI數據源;嵌套異常是javax.naming.NoInitialContextException:需要在環境或系統屬性中,或作爲applet參數或應用程序資源文件中指定類名:java.naming.factory.initial at org.springframework.jdbc.datasource。 JupiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:48)〜[spring-jdbc-4.3.6.RELEASE.jar:4.3.6.RELEASE] at org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration.dataSource(JndiDataSourceAutoConfiguration。 java:62)〜[spring-boot-autoconfigure-1.5.1.RELEASE.jar:1.5.1.RELEASE] at org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration $$ EnhancerBySpringCGLIB $$ 9509801a.CGLIB $ dataSource $ 0 ()〜........

我的POM.xml

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.1.RELEASE</version> 
    <relativePath /> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <java.version>1.8</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 


    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
    </dependency> 
</dependencies> 
+0

你使用任何JUNit測試?如果是這樣..嘗試使用maven編譯並排除測試 –

+0

您好,感謝您的評論。我沒有任何自定義測試,但我正在使用默認測試。如果默認包含JUNit,你能告訴我如何排除它嗎?我假設這是在pom.xml中完成的。 – RedA

+0

嘗試在pom.xml中添加以下內容(在屬性標記中):\t \t' true true' –

回答

0

問題是,當您嘗試使用maven進行編譯時,maven會嘗試執行Junit測試;在你的情況下,你有在src/resources/java一些單元測試,所以maven試圖執行它們。由於您使用的是JNDI數據源,這意味着servlet容器必須處於活動狀態才能執行測試,否則您無法獲得連接。

在這種情況下,當maven試圖執行測試時,可能沒有servlet容器(以及沒有JNDI數據源)處於活動狀態,並且您的測試會引發錯誤。

爲了解決這個問題(和編譯Maven構件),你必須:

  • 或排除執行測試:這是通過在pom.xml中添加<maven.test.skip>true</maven.test.skip>完成。沒有測試將被執行
  • 或忽略測試錯誤,這是通過在pom.xml中添加<maven.test.failure.ignore>true</maven.test.failure.ignore>來完成的。在這種情況下,測試將被執行,但任何測試誤差不會停止Maven的編譯

我給的配置不僅告訴Maven來不執行測試,但它告訴Maven來未在任何測試誤差

我停止希望我已經更清楚了...我的英語不是最好的

+0

非常感謝您的澄清。我也發現這(可能與我的問題有關):https://stackoverflow.com/questions/34756264/spring-boot-with-datasource-when-testing – RedA

相關問題