gradle: Exécution de la tâche “type:Exec” avec de nombreux arguments avec des espaces
J'ai le gradle tâche qui devrait créer Websphere profil sur Windows OS
task createProfile(type:Exec) {
def commandToExecute = new StringBuffer()
def profile = 'AppSrv02'
def wasHome = 'C:/IBM new/WebSphere/AppServer'
def str = new LinkedList <String> ();
str.add('cmd')
str.add('/c')
str.add(wasHome + '/bin/manageprofiles.bat')
str.add('-create')
str.add('-profileName')
str.add(profile)
//str.add('-templatePath')
//str.add(wasHome + '/profileTemplates/default')
println (str)
commandLine str.toArray()
}
Et le problème semble si je ne commentez lignes commentées, après la tâche échoue et me dire que: "C:/IBM" n'est pas valide fichier de commandes. Si j'ai mis profileTemplates pas dans le dossier qui contient des espaces, tout fonctionne bien à nouveau. Mais les modèles ne se trouve int wasHome( Et parfois wasHome a des espaces(
J'ai, maintenant, des idées pourquoi l'ajout de modèles de clés avec la valeur avec des espaces influence de telle façon que Gradle essaie de démarrer "C:/IBM" au lieu spécifié " C:/IBM nouveau/WebSphere/AppServer/bin/manageprofiles.chauve-souris". Il semble que, éventuellement, d'un problème à l'intérieur de java.lang.ProcessBuilder.
J'essaie de citer les chemins, en ajoutant "/""
mais rien ne fonctionne(((( ce qui n'est pas une surprise, parce que ProcessBuilder implique citant par elle-même si elle est nécessaire.
Donc, je me suis même demandé si quelqu'un avait le même problème et pourrait recommander la façon de contourner ce problème? Merci à l'avance.
OriginalL'auteur serg | 2013-12-16
Vous devez vous connecter pour publier un commentaire.
Si quelqu'un en avait besoin, nous avons trouvé une solution de contournement pour ce problème. La tâche ressemble enfin:
L'idée de base est de passer les arguments à la Gradle pas tant de la chaîne, mais comme une liste. Donc, dans cette façon il n'y a pas de problèmes si un argument contient un espace.
--autoprefix="last 2 versions"
, et les espaces entre les doublequotes étaient toujours jeter des choses.OriginalL'auteur serg
Changement lignes suivantes
De cette façon, le chemin d'accès complet vers le fichier de commandes est cité.
MODIFIÉ Comme indiqué par dbenhan, un peu brouillée. Cela "devrait" être quelque chose comme
MAIS, tandis que gradle en particulier et windows, en général, peut gérer les chemins d'accès avec slash séparateurs, je n'ai aucune idée si
manageprofiles.bat
pouvez, et vous êtes de passage d'un paramètre avec un chemin dans. Peut-être, vous devrez changer les chemins d'accès à'c:\\IBM new\\....'
str.add('"'+wasHome+'/bin/manageprofiles.bat"')
je sais. Mais cela permet de décommentez les deux lignes suivantes et utilisez
str.add(wasHome + '/profileTemplates/default"')
de réutiliser le devis initial (plaisanterie, vous avez raison 😉 )essayé les deux, toujours le même résultat(((( toujours pas de travail, en quelque sorte ant le faire parfaitement, avec gradle je ne suis pas parvenu à réussir.
voir mise à jour de réponse. Espérons que cette aide.
malheureusement, aucune( j'ai ajouté des guillemets: pas de résultat, changé les barres obliques: encore une fois, rien> Même println imprime [cmd /c "C:\IBM nouveau\WebSphere\AppServer\bin\manageprofiles.chauve-souris", -créer, -profileName, AppSrv02, -templatePath, "C:\IBM nouveau\WebSphere\AppServer\profileTemplates\default"], ligne de commande toujours dit que "C:\IBM" n'est pas valide commande ou quelque chose de ce
OriginalL'auteur MC ND
Essayer Cette
OriginalL'auteur Singhak