2017-02-12 13 views
0

저는 gradle을 빌드 도구로 사용하고 Mysql을 jndi 데이터 소스로 사용하여 봄 mvc 애플리케이션을 만들고 있습니다. 저는 전쟁을 구축하고 수동으로 배치하여 실행할 수 있습니다. 내가 노력하고 있어요 그러나 나는이 내 build.gradle 파일로 다음과 같은 예외mysql DataSource와 gretty를 사용하는 javax.naming.NoInitialContextException

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 

을 얻고있다 gretty를 사용하여 실행 -

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> 

이것은 스프링 설정 파일 내 항목입니다 : -

<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 
}