我无法清理安装我的项目。 我需要在WAR(而不是jar)中使用远程JNDI,但是在application.properties中使用名称会在mvn clean install期间抛出错误(由于"未找到数据源jndi名称")
如果我必须使用来自远程服务器的jndi名称,我无法控制,如何在没有查找失败的情况下在WAR中编译我的包,但是在服务器上部署/安装应用程序时让它查找?任何提示,或方向都非常有用......
在app prop中,我有
spring.datasource.jndi名= JDBC / FF-应用
我尝试过:Spring boot JNDI datasource lookup failure - Name comp/env/jdbc not found in context "java:"
几乎在stackoverflow中提出的关于远程jndi的所有问题..
一些错误:
引起:org.springframework.beans.BeanInstantiationException:无法实例化[javax.sql.DataSource]:工厂方法' dataSource'抛出异常;嵌套异常是org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException:无法查找名称为' jdbc / ff-app&#39 ;;的JNDI DataSource嵌套异常是javax.naming.NoInitialContextException:需要在环境或系统属性或applet参数或应用程序资源文件中指定类名:java.naming.factory.initial 在org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)〜[spring-beans-4.3.6.RELEASE.jar:4.3.6.RELEASE] 在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&#39 ;;的JNDI DataSource嵌套异常是javax.naming.NoInitialContextException:需要在环境或系统属性或applet参数或应用程序资源文件中指定类名:java.naming.factory.initial 在org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:48)〜[spring-jdbc-4.3.6.RELEASE.jar:4.3.6.RELEASE] 在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 :(得分:0)
关键是当你尝试使用maven进行编译时,maven会尝试执行Junit测试;在你的情况下,你在src / resources / java中有一些单元测试,所以maven尝试执行它们。由于您使用的是JNDI数据源,这意味着servlet容器也必须处于活动状态才能执行测试,否则您将无法获得连接。
在这种情况下,当maven尝试执行测试时,可能没有servlet容器(因此,没有JNDI数据源)处于活动状态,并且您的测试会引发错误。
要解决此问题(并编译maven工件),您必须:
filenames
来完成的。不会执行任何测试os.path.join(root, filename)
来完成的。在这种情况下,将执行测试,但任何测试错误都不会停止maven编译我给出的配置不仅告诉maven不执行测试,而且告诉maven不要停止任何测试错误
我希望我更清楚......我的英语不是最好的