2013-02-03 7 views
26

항아리 라이브러리 종속성을 복사하는 방법 나는이 build.gradle은 Gradle을

apply plugin: 'java' 
apply plugin: 'application' 

manifest.mainAttributes("Main-Class" : "com.test.HelloWorld") 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile (
     'commons-codec:commons-codec:1.6', 
     'commons-logging:commons-logging:1.1.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpcore:4.2.1', 
     'org.apache.httpcomponents:httpmime:4.2.1', 
     'ch.qos.logback:logback-classic:1.0.6', 
     'ch.qos.logback:logback-core:1.0.6', 
     'org.slf4j:slf4j-api:1.6.0', 
     'junit:junit:4.+' 
    ) 
} 

으로 실행 가능한 병을 가지고 있지만 종속성 단지를 찾을 수 없기 때문에 그것은 실패 실행합니다.

다음이 코드 추가 :

task copyToLib(type: Copy) { 
    into "$buildDir/output/libs" 
    from configurations.runtime 
} 

아무것도하지만 변화 ... 내가 폴더 출력/libs와 찾을 수는 ...

어떻게 종속성 libs와 단지에 복사 할 수 있습니다 지정된 폴더 또는 경로?

+0

코드를 어떻게 실행합니까? –

+0

@PeterNiederwieser Niederwieserfirst 실행 : gradle 빌드, 실행 가능한 jar 파일 을 실행 한 다음 jar 파일을 실행하십시오. java -jar XXX.jar – jychan

+0

복사 대신 Sync를 사용하고 싶을 것입니다. https://docs.gradle.org/current/userguide/working_with_files.html#sec:sync_task – morty

답변

1

응용 프로그램 플러그인은 다음과 같이 기본 클래스 이름을 설정하도록 요구 :

mainClassName = "com.test.HelloWorld" 

당신은 당신의 빌드 스크립트에 저것을 추가해야합니다. java 명령으로 응용 프로그램을 실행하려고하면 클래스 경로를 -cp으로 설정해야합니다.

응용 프로그램 플러그인은 distZip 작업을 제공하여이 프로세스를 단순화합니다. 이 작업을 실행하면 build/distributions 아래에 전체 배포본이 생성됩니다. 배포판에는 시작 스크립트와 모든 종속성이 포함되어 있습니다. 생성 된 시작 스크립트는 이미 클래스 경로를 설정하므로 더 이상 처리 할 필요가 없습니다.

31

추가 : gradle build 실행은 Gradle을이 작업을 빌드

build.dependsOn(copyToLib) 

언제, 어떤 작업 그것에 (dependsOn 선언) 따라 달라집니다. build.dependsOn(copyToLib)을 설정하지 않으면 Gradle은 복사 작업을 빌드 작업과 연결하지 않습니다.

그래서 :

apply plugin: 'java' 
apply plugin: 'application' 

manifest.mainAttributes("Main-Class" : "com.test.HelloWorld") 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile (
     'commons-codec:commons-codec:1.6', 
     'commons-logging:commons-logging:1.1.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpclient:4.2.1', 
     'org.apache.httpcomponents:httpcore:4.2.1', 
     'org.apache.httpcomponents:httpmime:4.2.1', 
     'ch.qos.logback:logback-classic:1.0.6', 
     'ch.qos.logback:logback-core:1.0.6', 
     'org.slf4j:slf4j-api:1.6.0', 
     'junit:junit:4.+' 
    ) 
} 

task copyToLib(type: Copy) { 
    into "$buildDir/output/libs" 
    from configurations.runtime 
} 

build.dependsOn(copyToLib) 
+0

SonarQube 분석에서 Javacode AST 스캔 중에 ERROR/WARN - Class xx.yy.zz를 찾을 수 없습니다. 이를 해결하기 위해 컴파일, testCompile, 런타임 중에 필요한 모든 jar (종속성)를 포함하는 "sonar.java.libraries"를 설정해야했습니다. configure.runtime의 configurations.testCompile에서 "configurations.compile에서"를 추가했습니다. "build/dependent-jars"폴더에 모든 jar 파일이 있습니다. 설정 sonar.java.libraries = build/dependent-jars/*. jar 오류가 발생하지 않습니다. 고마워, gradle 작업 영역 외부 캐시를 유지하지만이 코드를 사용하여 .jar 빌드 폴더에 가져올 수있었습니다. –

10

나는 응용 프로그램 플러그인 방식이 너무 복잡하고 출력이 너무 장황 찾을 수 있습니다.

apply plugin: 'java' 
apply plugin: 'java-library-distribution' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.apache.commons:commons-lang3:3.3.2' 
} 

// Task "distZip" added by plugin "java-library-distribution": 
distZip.shouldRunAfter(build) 

jar { 
    // Keep jar clean: 
    exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF' 

    manifest { 
     attributes 'Main-Class': 'com.somepackage.MainClass', 
        'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ') 
    } 
    // How-to add class path: 
    //  http://stackoverflow.com/questions/22659463/add-classpath-in-manifest-using-gradle 
    //  https://gist.github.com/simon04/6865179 
} 

는 요지 here으로 주최 : 여기에 드디어 내가 즉, 하위 디렉토리 /lib에 의존 항아리 배포 zip 파일을 생성하고 매니페스트 파일에 Class-Path 항목에 모든 종속성을 추가, 행복했던 설정을 가지고 방법입니다.

결과는 build/distributions에서 찾을 수 있습니다하여 압축 해제 된 내용은 다음과 같이

:

lib 디렉토리/평민 - lang3-3.3.2.jar
MyJarFile.jar

목차 MyJarFile.jar#META-INF/MANIFEST.mf :

매니페스트 - 버전 : 1.0
메인 클래스 : com.somepackage.MainClass
클래스 경로 : lib/commons-lang3-3.3.2.jar

+1

고마워 위대한 작품 엄마 ' –