IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Impossible de compiler un HelloWord en java via la ligne de commande powershell


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2020
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2020
    Messages : 88
    Par défaut Impossible de compiler un HelloWord en java via la ligne de commande powershell
    Bonjour,

    Je n'arrive pas à compiler un simple HelloWord.java en ligne de commande via powershell.
    Mon code source ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class HelloWord
    {    
        public static void main(String[] args)
        {
            System.out.println("Hello Word");
        }
    }
    Ensuite je lance la pseudo-compilation via la commande javac (powershell)
    :
    J'obtiens bien mon Bytecode et donc le fichier HelloWord.class (aucun message d'erreur).

    Ensuite je veux l’exécuter via la JVM par cette ligne de commande (powershell) :
    J'ai le message d'erreur suivant :
    Error: Could not find or load main class .\HelloWord.class
    Caused by: java.lang.ClassNotFoundException: /\HelloWord/class


    J'ai cherché sur internet et j'ai vu qu'il y avait une solution sur ce même forum à mon problème ici = https://www.developpez.net/forums/d6...igne-commande/

    J'ai donc essayé les lignes de commandes suivantes (powershell) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java -classpath .\HelloWord.class
    java - classpath .\HelloWord.class
    java.exe -classpath .\HelloWord.class
    java.exe - classpath .\HelloWord.class
    'C:\Program Files\Microsoft\jdk-11.0.12.7-hotspot\bin\java.exe' -classpath .\HelloWord.class
    'C:\Program Files\Microsoft\jdk-11.0.12.7-hotspot\bin\java.exe' - classpath .\HelloWord.class
    Juste je demande confirmation :
    La JVM permet d'exécuter le Bytecode ?
    Le JDK contient notamment le compilateur Javac qui permet de compiler le code source écrit en Java ?

    Je précise que quand je tente de compiler ce programme avec VSC je n'ai pas de problème, donc il ne s'agit certainement pas d'une erreur dans le code source.

    Pour localiser mon JDK j'ai rentré les commandes suivantes (powershell) = https://www.delftstack.com/fr/howto/...ation-windows/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    where java => aucun retour
    where java.exe => aucun retour
    ...
    La seul qui me donne un retour est la suivante :
    gcm -all java
    CommandType     Name                                               Version    Source
    -----------     ----                                               -------    ------
    Application     java.exe                                           11.0.12.0  C:\Program Files\Microsoft\jdk-11.0.12.7-hotspot\bin\java.exe
    Ma version de powershell est (la dernière release) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $PSVersionTable
    Name                           Value
    ----                           -----
    PSVersion                      7.2.7
    PSEdition                      Core
    GitCommitId                    7.2.7
    OS                             Microsoft Windows 10.0.19044
    Platform                       Win32NT
    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
    PSRemotingProtocolVersion      2.3
    SerializationVersion           1.1.0.1
    WSManStackVersion              3.0
    Je comprends pas pourquoi ça ne fonctionne pas.
    Merci pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par zephyre Voir le message
    Juste je demande confirmation :
    La JVM permet d'exécuter le Bytecode ?
    Le JDK contient notamment le compilateur Javac qui permet de compiler le code source écrit en Java ?
    Oui oui... C'est juste que la bonne commande était :

    Pas de .\ au début et pas de .class à la fin.

    Les commandes javac et java ont beaucoup de points communs, mais n'ont pas tout à fait la même logique.

    La syntaxe est java <nom qualifié de la classe de démarrage> .

    Il s'agit d'un nom de classe (et qualifié de surcroît), pas d'un nom de fichier ni d'un chemin vers ce nom de ficher.

    Ta classe s'appelle HelloWorld, et puisqu'elle ne déclare pas appartenir à un package, son nom qualifié consiste en son nom seul (ce sera à éviter plus tard, mais pour l'instant ça ira).

    En principe c'est tout ce que tu as à faire. Mais j'imagine que tu te demandes comment il sait qu'il doit aller chercher la classe ici. Ben, il cherche les fichiers .class dans le répertoire en cours, tout bêtement. Si tu voudrais qu'il aille les chercher ailleurs, ou si tu insistes pour dire explicitement que c'est dans le répertoire en cours, il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath . HelloWorld
    Autrement dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath <classpath> <nom qualifié de la classe de démarrage>
    Le classpath est une liste, séparée sous Windows par des point-virgules, d'emplacements où aller chercher des classes. Les emplacements peuvent être des répertoires, ou des fichiers ".jar". Dans mon exemple du dessus, le classpath est constitué d'un répertoire, le répertoire courant.

    Si tu demandes comment indiquer le fichier de la classe à charger, plutôt que son nom, oublie cette idée. Java ne fonctionne pas comme ça et c'est tout. Ce n'est pas juste une marotte, tout son système interne de localisation, chargement et identification de classes fait que tenter de le permettre manquerait beaucoup trop de sens. Forcément, quand on fait un programme d'une classe de 5 lignes, ça se comprend assez peu. Mais c'est pas pour ça que Java est conçu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2020
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2020
    Messages : 88
    Par défaut
    @thelvin

    Merci beaucoup pour tes explications.
    C'est clair pour moi.
    J'ai testé ça fonctionne parfaitement.
    Je clos le sujet.
    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/08/2007, 22h00
  2. [ANT] Passage de paramètre via la ligne de commande.
    Par BarBiTueRie dans le forum ANT
    Réponses: 2
    Dernier message: 18/07/2007, 10h28
  3. Modifier Proxy internet explorer via la ligne de commande
    Par Louis Griffont dans le forum Windows XP
    Réponses: 20
    Dernier message: 24/04/2007, 08h28
  4. Compilation d'un Projet Visual Basic en ligne de commande
    Par Nico+10) dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 16/03/2007, 09h37
  5. Compiler en dehors de Visual et en ligne de commande
    Par chris_wafer_2001 dans le forum MFC
    Réponses: 3
    Dernier message: 22/01/2006, 21h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo