2017-02-12 72 views
0

我正在使用gradle作爲構建工具和Mysql作爲jndi數據源製作spring mvc應用程序。我可以通過構建一個war並手動部署它來運行它。但是,當我試圖使用gretty我得到以下異常javax.naming.NoInitialContextException與MySQL DataSource和gretty

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 

這是我的build.gradle文件運行它: -

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'eclipse-wtp' 
//apply plugin: 'jetty' //too old, Jetty6, use gretty 
apply plugin: 'org.akhikhl.gretty' 
apply plugin: 'idea' 
apply plugin: 'jacoco' //code coverage 

def springVersion = "4.2.4.RELEASE" 
def jdkVersion = 1.8 
def junitVersion = "4.12" 
def logbackVersion = "1.1.3" 
def jclOverSlf4jVersion = "1.7.14" 
def jstlVersion = "1.2" 
def hamcrestVersion = "1.3" 
def servletApiVersion = "3.1" 
def mysqlVersion = "5.1.31" 

sourceCompatibility = jdkVersion 
targetCompatibility = jdkVersion 

repositories { 
    mavenLocal() 
    mavenCentral() 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.10' 
} 

configurations.all { 
    exclude group: "commons-logging", module: "commons-logging" 
} 

dependencies { 

    compile 'org.slf4j:jcl-over-slf4j:' + jclOverSlf4jVersion 
    compile 'ch.qos.logback:logback-classic:' + logbackVersion 
    compile 'org.springframework:spring-webmvc:' +springVersion 
    compile 'org.springframework:spring-context:' + springVersion 
    compile 'org.springframework:spring-orm:' + springVersion 
    compile 'javax.servlet:jstl:' + jstlVersion 
    compile 'org.springframework:spring-test:' + springVersion 
    compile 'mysql:mysql-connector-java:' + mysqlVersion 
    //exclude the build in hamcrest 
    testCompile('junit:junit:' + junitVersion) { 
     exclude group: 'org.hamcrest' 
    } 
    testCompile 'org.hamcrest:hamcrest-library:' + hamcrestVersion 
    //include in compile only, exclude in the war 
    providedCompile 'javax.servlet:javax.servlet-api:' + servletApiVersion 

} 

//Gretty 
buildscript { 
    repositories { 
    jcenter() 
    } 

    dependencies { 
    classpath 'org.akhikhl.gretty:gretty:1.1.5' 
    } 
} 

gretty { 
    port = 9090 
    contextPath = 'loanSharks' 
    servletContainer = 'tomcat8' 
} 



//For Eclipse IDE only 
eclipse { 

    wtp { 
    component { 

     //define context path, default to project folder name 
     contextPath = 'loanSharks' 

    } 

    } 
} 

jacoco { 
    toolVersion = "0.7.5+" 
    reportsDir = file("$buildDir/reports/jacoco") 
} 

jacocoTestReport { 
    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 
} 

這裏是在web.xml我的JNDI項: -

<resource-ref> 
     <res-ref-name>jdbc/devcore</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

這是我在春天-config文件條目: -

<bean id="dataSource" 
    class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="java:comp/env/jdbc/devcore" /> 
     <property name="lookupOnStartup" value="true"/> 
     <property name="proxyInterface" value="javax.sql.DataSource"/> 
    </bean> 

我在META-INF/context.xml文件和META-INF/jetty-env.xml文件中也有我的數據庫條目,正如其他一些相關文章中所建議的那樣。那麼任何人都可以請解釋爲什麼我無法使用gretty來運行我的應用程序。

回答

1

你需要激活gretty配置內部命名:

gretty { 
    enableNaming = true 
}