2013-07-25 1 views
6

Gradle 1.6으로 빌드 된 일부 jar 파일을 Java Web Start 응용 프로그램의 일부로 함께 제공하고 싶습니다.Gradle을 사용하여 jar 파일의 매니페스트에 속성 추가

나는 현재 인증서를 올바르게 항아리에 서명하고 그래서 같은 표준 항아리 작업을 사용하여 생산 된 유물에 대한 codebasepermissions 속성을 지정할 수 있습니다

jar { 
    manifest.attributes provider: 'tribe7.net' 
    manifest.attributes permissions: 'all-permissions' 
    manifest.attributes codebase: '*' 
} 

이 때문에 최신 자바 Webstart를 버전 Oracle의 JDK/JRE는 이러한 속성을 필수로 만들지 만 그렇지 않으면 사용자에게 응용 프로그램의 보안에 대해 불만을 제기합니다.

Preventing RIAs from Being Repurposed

는하지만, 내 유물 항아리 타사 종속성이 (예를 들어, SLF4J에 대한) 및 I는 타사 항아리에서 이러한 부가 요소를 포함 할 수있는 직관적 인 방법을 찾고 있습니다. 이를 염두에두고, 내 마지막 Webstart를 응용 프로그램의 구조는 다음과 같은 종류의 외모 :

./build/webstart/my.jnlp 
./build/webstart/lib/myartifactA-1.00.jar 
./build/webstart/lib/myartifactB-1.00.jar 
./build/webstart/lib/myartifactC-1.00.jar 
./build/webstart/lib/slf4j-api-1.7.5.jar 

결과는 런타임에, Webstart를 내 유물에 대해 불평하지 않습니다하지만 타사 항아리를 위해 그렇게 때문에 그들은 분명히 돈 'T는 자신의 매니페스트 파일의 속성이 있습니다

Missing Codebase manifest attribute for: file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar 
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar 
Missing Codebase manifest attribute for: file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar 
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar 

내가 직접 내가 어떻게 든 build/webstart/lib 디렉토리 내부에 존재 매니페스트 파일을 수정해야하는 타사 항아리에 대한 매니페스트 생성을 제어하지 않기 때문에 명시 적으로 그 속성을 포함 웹 스타트를 행복하게하기 위해서.

Gradle을 사용하여 jar 파일의 매니페스트에 속성을 추가하는 방법이 있습니까? 시간에 대한

build.gradle

감사합니다 도움이 : 경우 사람이 내 Gradle을 구축 스크립트, 관심!

UPDATE 베드로의 대답은

을했다! 다음은 업데이트 된 코드입니다.

ant.jar(destfile: it, update: true) { 
    delegate.manifest { 
    attribute(name: 'permissions', value: 'all-permissions') 
    attribute(name: 'codebase', value: '*') 
    } 
} 

ant.signjar(
    destDir: webstartSignedLibPath, 
    alias: project.getProperty('jarsign.keystore.alias'), 
    jar: it, 
    keystore: project.getProperty('jarsign.keystore.path'), 
    storepass: project.getProperty('jarsign.keystore.password'), 
    preservelastmodified: 'true' 
) 

고마워요!

답변

4

이러한 속성을 설정하려면 Jar의 압축을 풀고 (Groovy를 사용하여) 매니페스트를 편집 한 다음 Jar를 다시 포장해야합니다. 또는 중복 파일을 추가하지 않고 파일 덮어 쓰기가 지원되지 않는 것처럼 보이지만 (Ant docsduplicate 속성 참조) 매니페스트를 ant.jar(update = true)으로 덮어 쓸 수 있습니다. 항아리 병합 (다른 방법으로)은 다른 옵션 일 수 있습니다.