6
votes

Comment exécuter Javac avec des chemins comme argument contenant des espaces blancs?

J'essaie d'exécuter ce qui suit xxx

mais je reçois un xxx

J'ai aussi essayé d'entourer les deux Chemins avec des citations doubles mais il ne semble pas aider un peu: xxx

Qu'est-ce que je fais mal? Ce même code a fonctionné correctement dans d'autres ordinateurs (probablement parce qu'ils n'avaient pas d'espace blanc dans leurs chemins.).

Merci


7 commentaires

Ajout de la balise Windows parce que je pense que c'est une question de Windows CLI, plutôt que d'une question Java.


Je viens de lire un blog disant qu'il est préférable de montrer comment résoudre l'erreur que de donner une solution. Donc: Essayez-la d'abord avec des chemins sans espaces. Introduire des citations. Puis classpath avec vide, puis @ avec blanc. Devis avant @. Essayez les backslash.


Cela fonctionne bien pour moi avec les citations doubles. Quelle version du SDK Java utilisez-vous?


"Version Java" 1.7.0 "Java (TM) SE Runtime Environment (Build 1.7.0-B147) Java Hotspot (TM) Serveur 64 bits VM (version 21.0-B17, mode mixte)"


Votre deuxième version avec des guillemets doubles devrait fonctionner très bien. Pouvez-vous poster le contenu de fichiers_to_compile? Tous les chemins énumérés là-bas contenant des espaces devront également être cités.


C'est une question triviale. Essayez d'ici de rechercher Internet pour "Comment puis-je définir la classePath"


Si trivial que votre propre réponse s'est avérée inutile. Merci!


9 Réponses :


0
votes

Vous devez échapper aux espaces.

mettre un \ devant chaque espace et essayez ça.


1 commentaires

Gênant, les backslashes ne s'échapperont pas sur les fenêtres; Ils sont utilisés pour les chemins de fichiers



0
votes

Son prise seulement la 1ère partie de la chaîne source Retirez l'espace entre AB à partir du chemin et doit fonctionner correctement c: / utilisateurs / a_b / espace de travail / "@" c: / Users / a_b / espace de travail / fichiers_to_compile ". Jamais vous devez avoir des espaces dans le chemin d'autre que la dernière partie sera ignoré par le compilateur ou d'autres que vous pouvez mettre un '\' entre A \ b


0 commentaires

0
votes

Bit d'un piratage, mais si vous êtes sous Windows 7, vous pouvez aborder cela à l'aide de l'utilitaire mklink pour créer un autre dossier pointant sur le même endroit, mais sans espaces.

éditer : Peut-être une meilleure solution: xxx


4 commentaires

Cela doit être un outil d'usage général, je ne peux pas compter sur ce fait.


Est-ce qu'un ^ espaces d'échappement? par exemple. ... -ClassPath "C: / Utilisateurs / A ^ B / Espace de travail"


:( change de répertoire faisable?


Je vais essayer cela plus tard ce soir. Ne semble pas terrible.



0
votes

à partir des informations d'utilisation pour "Java /?"

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>cd "C:\Program Files (x86)\Java\jre6\bin"

C:\Program Files (x86)\Java\jre6\bin>java.exe
Usage: java [-options] class [args...]
       (to execute a class)
or  java [-options] -jar jarfile [args...]
       (to execute a jar file)

where options include:
-client       to select the "client" VM
-server       to select the "server" VM
-hotspot      is a synonym for the "client" VM  [deprecated]
              The default VM is client.

-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
              A ; separated list of directories, JAR archives,
              and ZIP archives to search for class files.


0 commentaires

2
votes

Je dois admettre que cela était plus difficile que j'avais imaginé. Après quelques essais et erreurs, j'ai proposé ce qui suit:

C: \ lol> "C: \ Program Files \ Java \ jdk1.7.0_07 \ bin \ javac" -cp "c: \ lol \ ab; c: \ lol \ foo bar "lol.java

où la structure du dossier est comme: xxx

J'ai fait une archive avec les dossiers et les fichiers Java, que vous pouvez saisir à: http://www.pvv.ntnu.no/~rakhmato/tmp/lol .tar

Vous devez ignorer l'option @ car il suffit de donner au compilateur un fichier et un chemin de classe approprié, il peut déterminer où tout est seul. Donnez simplement au compilateur votre principal.java et il comprendra ce que cela dépend de ce fichier.

Je vous recommanderais également d'écrire un script .bat de tristes pour rendre les choses plus simples. Rien de fantaisie, quelque chose comme ceci:

compile.bat:

"C: \ Fichiers de programme \ Java \ jdk1.7.0_07 \ bin \ javac" -ClassPath "c: \ lol \ AB; c: \ lol \ foo bar "Main.java

.. Mettez cela dans votre dossier de projet et exécutez compile.bat à partir de cmd


9 commentaires

"Le symbole du caret répond directement à ma question donc je vais accepter votre réponse. Malheureusement, la commande SVN ne semble pas la reconnaître! "


Personne n'a jamais eu de place dans leur dossier avant, certainement personne n'essayant de compiler une classe Java.


Je viens d'énoncer l'évidence: que le problème soulevé dans votre propre premier lien est resté non résolu, d'où mes préoccupations lorsque vous nous dites que "cela a déjà été répondu". Lequel bien sûr, on peut dire, bien que avec l'addition ajoutée: "mais pas résolu!"


"Si vous avez toujours des problèmes, essayez de séparer les chemins avec un côlon." Il n'y a qu'un seul chemin ..


D'ACCORD. Qu'est-ce que c'est ça @ faire là-bas? Je pensais que vous l'utilisiez pour séparer les chemins.


Javac est votre ami: "Pour un grand nombre de fichiers source, répertoriez les noms de fichiers dans un fichier, séparé par des pannes ou des pauses de ligne. Ensuite, utilisez le nom du fichier de liste de la ligne de commande Javac, précédée d'un @ caractère."


Je vais essayer ce que vous suggérez. Je ne suis pas sûr de pouvoir quitter l'option @, il n'y a pas de fichier principal (les fichiers feront partie d'une bibliothèque) afin que je dois disposer d'une liste de fichiers à compiler.


Vous devriez envisager de passer un peu de temps pour apprendre à construire avec la fourmi ... vous pouvez faire le travail @ option en le mettant dans un chemin sans espaces, car c'est là que j'ai eu des ennuis avec elle. Je pense aussi que la classe de classe doit être spécifiée à l'intérieur de ce @file si vous allez l'utiliser. Mais vraiment, cherchez des instructions sur la construction avec la fourmi. C'est vraiment simple et surtout automatisé.


J'ai trouvé le problème (je l'ai dit comme réponse). Ant ne vous aiderait pas un peu ici, je développe une sorte de générateur de code, où je génère un code Java, puis de la compilation de la course.



-1
votes

Je ne peux pas le tester, mais je suggérerai ce qui suit (comme le pointon suggéré DMCGIL suggéré doit être séparateur de classe sur Windows): xxx

Il semble que le Échapper Charachter pour Win Shell est Caret .

qui est également suggéré ici .

EDIT:

Aussi, dans votre question, j'ai remarqué l'utilisation des slashes (/) dans les chemins (/) dans les chemins, ne pas T Toutes les versions de Windows utilisent Backslashes (\) comme séparateurs de fichiers? J'ai vu votre commentaire quelque part sur ce fil indiquant que, je vais donc supposer que vous avez dactylographié en question.


1 commentaires

Les ^'s avaient été suggérés dans le passé et, bien que cela fonctionne effectivement lors du fait de CD, ce n'est pas en tant que paramètre Javac.



5
votes

Votre deuxième essai est juste xxx

mais pour être complet, vous devez échapper aux espaces dans le fichier texte "Files_To_Compile" à l'aide de:

  • la même syntaxe que le fichier de propriétés: \

    ou

    • Double citation chaque ligne

      Je suggère la seconde mais je ne suis pas sûr.


1 commentaires

Presque là-bas, c'est bizarre mais je n'ai vu que cette réponse!



6
votes

J'ai enfin proposé la solution à la question et je suppose que personne ici n'aurait pu le deviner.

La fonction à la réponse réside avec le fait que le contenu de la liste des fichiers (signalé comme @ dans les args) aura généralement chacune de ses chaînes avec la sous-chaîne initiale égale à ce qu'on passe à la fois comme le chemin de classe et le fichier @.

alors ..

Le problème n'a jamais été les paramètres de ligne de commande, comme suggéré, mais avec le contenu du fichier @.

Chaque ligne du fichier doit être placée dans sa propre ligne, entourée de guillemets, et avoir en considération que si vous êtes sous Windows, vous devez mettre les noms de fichier sous forme de C: \\ a \\ b \\\ c.txt !!!


0 commentaires

2
votes
  • Tout d'abord à l'aide de la commande CD dans Shell Maj Activez votre répertoire sur celui où votre fichier est enregistré. p>

    javac hello1.java
    
  • Notez que j'ai utilisé "\" chaque fois qu'il y a de l'espace impliqué. "Fichiers personnels" devient "Personal \ Files". P> Li>

  • Puis utilisez "Javac FileName.java" P>

    cd /home/sayantani/PERSONAL\ FILES/sem\ 4\ courses/PLC/code/
    

0 commentaires