2012-10-31 5 views
0

나는이 일부 항아리를 포함하는 귀, 이제받는다는 유물 항아리의 새 버전을 패치

e.g. 
Sample.ear\WEB-INF\lib\org.apache.sling.installer.core-3.3.5-R1242752.jar 
Sample.ear\WEB-INF\lib\org.apache.sling.installer.factory.configuration-1.0.2.jar 
Sample.ear\WEB-INF\lib\cq-jcrclustersupport-0.1.6.jar 
Sample.ear\WEB-INF\lib\com.day.jcr.vault-2.3.24.jar 

나는 다음과 같은 항아리를 포함하는 새 Hotfix.zip을 얻을 가정 해 봅시다,

Hotfix.zip\lib\org.apache.sling.installer.core-3.4.6-R12345.jar 
Hotfiz.zip\lib\org.apache.sling.installer.factory.configuration-2.1.4.jar 
Hotfiz.zip\lib\cq-jcrclustersupport-5.6.7.jar 

작업 - 새 항아리로 귀에 패치를하십시오.

나는 위치 Y.

  • 복사 귀에 핫픽스의 내용에 위치 X
  • 의 압축을 풀고 핫픽스로, 지금까지 다음

    1. 의 압축을 풀고 귀를 시도했다.
    2. 귀 뒤를 지퍼로 감습니다.

    문제은 - 나는 내가 어떤 방법은 단지 이미 이전 버전의 존재 여부를 확인하고 삭제하고 새로운 하나를 복사 할 점 (3)에 붙어있어.

    솔루션 - Groovy는 AntBuilder()의 압축 풀기 작업을 제공하기 때문에 Groovy를 사용하고 있습니다. 그러나 Java와 관련하여 도움이 될 것입니다.

    생각한 - 정규식의 측면에서 생각하기가 힘들지만 해결책을 찾을 수 없습니다.

    참고 - 항아리의 세부 정보는 포함하지 말고 이름 만 입력하십시오.

  • 답변

    1

    다음은이 일을 빠르고 좀 더러운 방법은 ...

    라이브러리 정의하는 클래스로 시작하자 :

    def originals = [ 
        'Sample.ear/WEB-INF/lib/org.apache.sling.installer.core-3.3.5-R1242752.jar', 
        'Sample.ear/WEB-INF/lib/org.apache.sling.installer.factory.configuration-1.0.2.jar', 
        'Sample.ear/WEB-INF/lib/cq-jcrclustersupport-0.1.6.jar', 
        'Sample.ear/WEB-INF/lib/com.day.jcr.vault-2.3.24.jar', 
    ] 
    
    def replacements = [ 
        'Hotfix.zip/lib/org.apache.sling.installer.core-3.2.6-R12345.jar', 
        'Hotfiz.zip/lib/org.apache.sling.installer.factory.configuration-2.1.4.jar', 
        'Hotfiz.zip/lib/cq-jcrclustersupport-5.6.7.jar', 
    ] 
    
    : 다음

    class LibVersion implements Comparable { 
        String filename 
        String library 
        String version 
    
        // Just compare the String versions. 
        // This is naïve, and should probably be improved 
        int compareTo(Object other) { 
        version <=> other.version 
        } 
    
        String toString() { 
        "$library: $version" 
        } 
    
        static fromFilename(String s) { 
        def matcher = (s =~ $/.+/(.+?)-([0-9\.]+(?:-.+?){0,1})\.jar/$)[0] 
        new LibVersion(filename: s, library: matcher[ 1 ], version: matcher[ 2 ]) 
        } 
    } 
    

    을, 테스트 데이터를 제공

    원본 라이브러리의지도를 생성하고 대체 라이브러리에 대해 동일한 작업을 수행 할 수 있습니다.

    Map<String,LibVersion> originalVersions = originals.collectEntries { 
        LibVersion.fromFilename(it).with { v -> 
        [ (v.library):v ] 
        } 
    } 
    
    Map<String,LibVersion> replacementVersions = replacements.collectEntries { 
        LibVersion.fromFilename(it).with { v -> 
        [ (v.library):v ] 
        } 
    } 
    

    Should replace org.apache.sling.installer.factory.configuration: 1.0.2 with org.apache.sling.installer.factory.configuration: 2.1.4 
    Should replace cq-jcrclustersupport: 0.1.6 with cq-jcrclustersupport: 5.6.7 
    
    : 파일 (원본지도에없는) 새로운 또는 대체 버전이 원래

    replacementVersions.each { k, v -> 
        def orig = originalVersions[ k ] 
        if(!orig || orig < v) { 
        println "Should replace $orig with $v" 
        } 
    } 
    

    이 인쇄보다 큰 경우

    다음, 우리는 교체를 통해 루프 및 인쇄 할 수 있습니다

    +0

    감사합니다. Tim. 그것은 굉장히 작동하며 나는 이것으로 많은 것을 배워야합니다. compareTo (...)가 모든 jar에 대해 작동하는지 확인해야합니다. 나는 방향을 알아 냈고 실패 할 경우를 대비하여 그것을 고칠 수 있습니다. 다시 한번 감사합니다!! – Arham

    관련 문제