다음은이 일을 빠르고 좀 더러운 방법은 ...
라이브러리 정의하는 클래스로 시작하자 :
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"
}
}
이 인쇄보다 큰 경우
다음, 우리는 교체를 통해 루프 및 인쇄 할 수 있습니다
감사합니다. Tim. 그것은 굉장히 작동하며 나는 이것으로 많은 것을 배워야합니다. compareTo (...)가 모든 jar에 대해 작동하는지 확인해야합니다. 나는 방향을 알아 냈고 실패 할 경우를 대비하여 그것을 고칠 수 있습니다. 다시 한번 감사합니다!! – Arham