[JAVA] [gradle] pathingJar ne fonctionne pas si le chemin de classe contient des espaces

Problèmes survenus

L'autre jour, j'ai écrit un article Run-apped with grails and it stop booting Je l'ai essayé avec un modèle qui le place et le déplace, mais apparemment cela ne fonctionne pas bien si le chemin de classe contient des espaces. Mon ordinateur a été configuré à l'avance par un employé de l'entreprise lorsque j'ai rejoint l'entreprise, mais le nom complet est vide. Il y a donc un espace dans le chemin du répertoire personnel. orz

Faire face

Les chemins de classe intégrés dans le fichier jar sont séparés par des espaces. Il semble que les blancs dans le chemin soient échappés avec% 20. Là où vous collectez les chemins du fichier jar pathingJar, remplacez les espaces.

build.gradle


...Omission...
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(' ')
        }
    }
}
...Omission...

Appliqué aux Grails

Grails a une astuce appelée pathingJar = true, mais j'ai également rencontré une situation mystérieuse où cela ne démarre pas. Par conséquent, écrivez comme suit. Si j'écris une tâche avec pathingJar telle quelle, je me fâche qu'elle existe déjà, j'ai donc choisi la tâche pathingJarEx.

build.gradle


...Omission...
// 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') }
}
...Omission...
bootRun {
    ...Omission...
    dependsOn pathingJarEx
    doFirst {
        classpath = files("$buildDir/classes/main", "$buildDir/resources/main", "$projectDir/gsp-classes", pathingJarEx.archivePath)
    }
}
...Omission...

référence

Exécuter l'application avec Grails ne démarre pas

[Gradle] Gérer l'erreur Createprocess = 206 [Note]

Recommended Posts

[gradle] pathingJar ne fonctionne pas si le chemin de classe contient des espaces
Arrays.asList (int []). Contains (int) ne fonctionne pas
Que faire si TextToSpeech ne fonctionne pas sur Android 11
Vérifiez si vous utilisez la liaison de données et que cela ne fonctionne pas