2013-11-20 2 views
4

여러 패키지가있는 gradle 프로젝트가 있습니다. 빌드가 끝나면 각 패키지는 build/libs에 jar 파일을 생성합니다. 외부 jar 종속성은 ~/.gradle로 가져옵니다. 이제 적절한 클래스 경로를 사용하여 명령 줄에서 로컬로 서비스를 실행하고 싶습니다. 이를 위해 클래스 패스를 구성하는 스크립트를 작성했습니다. 문제는 스크립트가 모든 외부 종속성을 이해하지 못하므로 클래스 경로를 구성 할 수 없다는 것입니다. 이걸 도와 줄 gradle을위한 방법이 있습니까? 이상적으로, 나는 모든 종속성을 빌드가 끝난 폴더에 덤프하고 싶습니다.Gradle 프로젝트의 클래스 경로는 어떻게 생성합니까?

답변

1

당신은 당신의 빌드 스크립트에서 이런 식으로 뭔가를 시도 할 수 있습니다 : 그것은 이미 돌봐 이후

// add an action to the build task that creates a startup shell script 
build << { 
    File script = file('start.sh') 

    script.withPrintWriter { 
     it.println '#!/bin/sh' 
     it.println "java -cp ${getRuntimeClasspath()} com.example.Main \"\[email protected]\"" 
    } 

    // make it executable 
    ant.chmod(file: script.absolutePath, perm: 'u+x') 
} 

String getRuntimeClasspath() { 
    sourceSets.main.runtimeClasspath.collect { it.absolutePath }.join(':') 
} 
+0

감사합니다. 그것은 유망 해 보인다. build.gradle 파일의 아무 곳에 나 추가 할 수 있습니까? 또한 이상적으로 어딘가에 클래스 경로를 덤프하고 스크립트에서 파일의 내용을 참조하게하고 싶습니다. 그게 나에게 많은 일을 해주고 스크립트의 일부가 될 필요는 없다. –

+0

나는 내가 뭘 시도했는지와 내가 본 오류를 보여주기 위해 질문을 업데이트했다. –

+0

'sourceSets.main.runtimeClasspath'는 기본적으로 [FileCollection'] (http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/FileCollection.html)이며 참조하는 File 객체를 포함합니다 1) 출력 폴더 ('build/classes/main','build/references/main' 등)와 2) 외부 저장소에있는 외부 jar 의존성을 빌드합니다.이 콜렉션을 반복하고 jar 파일을 쉽게 복사 할 수 있습니다 임의의 폴더에. – zagyi

10

첫째, 내가의 application plugin 할 수 있다면을 사용하는 것이 좋습니다 것입니다. 당신이 실제로 디렉토리에 클래스 패스에있는 모든 라이브러리를 복사 할 경우, 당신이 할 수있는

task writeClasspath << { 
    buildDir.mkdirs() 
    new File(buildDir, "classpath.txt").text = configurations.runtime.asPath + "\n" 
} 

:

파일로 자신을 클래스 패스를 덤프하려면 가장 간단한 방법은 무엇인가 같다 :

task copyDependencies(type: Copy) { 
    from configurations.runtime 
    into new File(buildDir, "dependencies") 
} 
+0

답해 주셔서 감사합니다. 응용 프로그램 플러그인을 사용하는 경우 JVM 설정을 어떻게 제어합니까? 커맨드 라인에서 전달 된 특정 설정으로 JVM을 시작하고 싶습니다. 응용 프로그램 플러그인이이를 구성하는 데 도움이된다면 유용 할 것입니다. –

+1

찾았습니까? -http : //www.gradle.org/docs/current/dsl/org.gradle.api.Project.html#N13953. 이걸 가지고 놀고 내가 원하는대로 할 수 있는지 알아 봅시다. –

+0

나는 제대로 작동하지 못했습니다. 응용 프로그램 플러그인을 추가하고 기본 클래스 이름을 지정했습니다. gradle 실행을 실행하면 클래스를 찾을 수 없습니다. 오류가 발생합니다. 또한 클래스 및 리소스 폴더가 만들어지지 않으므로 오류가 발생합니다. gradle 실행 문제는 /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java -Dfile.encoding = UTF-8 -cp/Users/name/gradleproject/build/classes/main입니다. :/Users/name/gradleproject/build/resources/main MainClass –

관련 문제