web-dev-qa-db-fra.com

Exécution de Java dans un package à partir de la ligne de commande

J'ai lu les questions précédemment posées. Certains sont vagues et aucun n'a résolu mon problème, alors je suis obligé de le demander à nouveau.

J'ai deux cours simples,

package One;
import One.Inner.MyFrame;
public class test
{
    public static void main(String args[])
    {
        MyFrame f= new MyFrame();
    }
}

Et l'autre classe est, 

package One.Inner;
import Java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame
{
    public MyFrame()
    {
        setPreferredSize(new Dimension(400,560));
        setVisible(true);
    }
}

Je suis au dossier de base "de base" dans Windows cmd. Je compile en utilisant

basic> javac *.Java -d .

Un dossier et un sous-dossier sont créés.

cd One
basic\One> Java test

Cela génère un grand nombre d'erreurs. Beaucoup de réponses demandaient de spécifier le chemin complet qui ne fonctionnait pas ..__ Mes classes sont dans One, donc spécifier One en utilisant -cp ne fonctionnait pas non plus.

25
user2756339

Vous le courriez comme:

Java One.Test

... mais à partir du répertoire root (basic), not à partir du répertoire One. Vous spécifiez toujours le nom de classe pleinement qualifié .

Oh, et les noms de paquet en Java devraient être en minuscule, donc one et one.inner, et non One et One.Inner. Juste une convention, mais qui suit à peu près tout le monde.

40
Jon Skeet

Si le répertoire est:

basic\One

Exécutez Java à partir du répertoire de base du package:

basic>Java One.test or basic>One.test <optional arguments>

(idéalement le paquet serait en minuscule et la classe en majuscule):

basic>Java one.Test

Si vous obtenez des messages "n'existe pas", la commande Java ne peut pas trouver les classes que vous avez référencées dans votre classe. Vous pouvez les pointer avec l'option -cp ('.' Signifie 'ici', et vous pouvez ajouter autant d'endroits que vous le souhaitez, divisé par ';' sous Windows et ':' sous Linux).

basic>Java -cp . one.Test
or
basic>Java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory  one.Test
13
MattC

En effet, si vous déclarez package dans votre fichier Java, le compilateur Java pense que votre système est doté de la même architecture de dossiers. Dans votre cas, le compilateur Java recherche One comme package, puis test.class. S'il vous plaît jeter un oeil pour l'image ci-dessous (je mon cas j'utilise Bonjour et Testeur) 

 .class

Comme vous pouvez voir le chemin dans l'image est Hello/Tester (mon exemple), l'architecture devrait donc ressembler à Hello-> Tester. 

Et si vous ne possédez pas la même architecture et ne souhaitez pas en créer lors de la compilation, utilisez la commande javacp. 

2
Simmant

lors de la création d'une classe avec un package si vous souhaitez l'exécuter à partir de cmd, vous devez créer un répertoire portant le même nom de package, y placer la classe. Vous pouvez ensuite l'exécuter facilement. Par exemple, vous avez créé une classe portant le nom "one" et cette classe dans le paquet portant le nom pack, vous devez exécuter ces commandes

1 javac un.Java 
après la compilation a créé un répertoire avec le nom pack, après cela lance cette commande 
2 Java pack.one 
Remarque:
Tout cela doit être fait dans le répertoire de travail courant et le nom "un", je l’ai choisi ici comme nom de fichier et nom de classe principale Nous connaissons tous le premier nom utilisé dans la première commande est le nom de fichier et le second. est le nom de la classe principale 

1
javageek

La ligne suivante du code Haralan Dobrev résout le problème.

Java -cp ../ one.Test
0
Ziaullah