[JAVA] [gradle] pathingJar funktioniert nicht, wenn der Klassenpfad Leerzeichen enthält

Probleme, die aufgetreten sind

Neulich schrieb ich einen Artikel Run-Apped mit Grails und es hörte auf zu booten, aber ich hatte die Möglichkeit, ihn mit Gradle zu bauen, also bezog ich mich auf den Pfad Jar. Ich habe es mit einem Muster versucht, das es einfügt und verschiebt, aber anscheinend funktioniert es nicht gut, wenn der Klassenpfad Leerzeichen enthält. Mein PC wurde von einem Mitarbeiter des Unternehmens im Voraus eingerichtet, als ich in das Unternehmen eintrat, aber der vollständige Name ist leer. Der Pfad zum Home-Verzeichnis enthält also ein Leerzeichen. orz

Bewältigung

Die im Jar eingebetteten Klassenpfade sind durch Leerzeichen getrennt. Es scheint, dass die Leerzeichen im Pfad mit% 20 maskiert werden. Ersetzen Sie die Leerzeichen, wenn Sie die Pfade der JAR-Datei pathingJar erfassen.

build.gradle


...Unterlassung...
task pathingJar(type: Jar) {
    dependsOn configurations.runtime
    appendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtime.files.collect {
                it.toURL().toString().replaceFirst(/file:\/+/, '/').replace(' ', '%20')
            }.join(' ')
        }
    }
}
...Unterlassung...

Auf Grale angewendet

Grails hat einen Trick namens pathingJar = true, aber ich bin auch auf eine mysteriöse Situation gestoßen, in der es nicht anfangen würde. Schreiben Sie daher wie folgt. Wenn ich eine Aufgabe mit pathingJar so schreibe, wie sie ist, ärgere ich mich darüber, dass sie bereits vorhanden ist, und habe daher die Aufgabe pathingJarEx ausgewählt.

build.gradle


...Unterlassung...
// grails {
// 	pathingJar = true
// }
task pathingJarEx(type: Jar) {
    dependsOn configurations.runtime
    appendix = 'pathing'

    doFirst {
        manifest {
            // Build the Class-Path for absolute paths based on runtime dependencies.
            attributes(
                'Class-Path': configurations.runtime.files.collect {
                    it.toURL().toString().replaceFirst(/file:\/+/, '/').replace(' ', '%20')
                }.join(' ')
            )
        }
    }
    exclude { it.file.absolutePath.contains('assetCompile') }
}
...Unterlassung...
bootRun {
    ...Unterlassung...
    dependsOn pathingJarEx
    doFirst {
        classpath = files("$buildDir/classes/main", "$buildDir/resources/main", "$projectDir/gsp-classes", pathingJarEx.archivePath)
    }
}
...Unterlassung...

Referenz

Run-App mit Grails bootet nicht

[Gradle] Umgang mit Erstellungsprozessfehler = 206 [Hinweis]

Recommended Posts

[gradle] pathingJar funktioniert nicht, wenn der Klassenpfad Leerzeichen enthält
Arrays.asList (int []). Enthält (int) funktioniert nicht
Was tun, wenn TextToSpeech unter Android 11 nicht funktioniert?
Überprüfen Sie, ob Sie die Datenbindung verwenden und diese nicht funktioniert