2017-06-22 148 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

相关问题