web-dev-qa-db-fra.com

javac "ne peut pas trouver le symbole" erreur avec la ligne de commande

J'ai deux classes Owning et OwningAccessor. Les fichiers sont dans le même répertoire.

public class Owning {
    String _name = "";
    public void printBanner()
    {
    }
    public void printOwning(double amount)
    {
        printBanner();

        //print details
        System.out.println("name:" + _name);
        System.out.println("amount:" + amount);
    }
}


public class OwningAccessor {
    public void access()
    {
        Owning o = new Owning();
        o.printOwning(500);
    }
}

Lorsque j'ai essayé de compiler OwningAccessor avec javac -cp . OwningAccessor.Java, j'ai eu une erreur de compilation. 

symbol  : class Owning
location: class smcho.OwningAccessor
        Owning o = new Owning();
        ^
OwningAccessor.Java:6: cannot find symbol
symbol  : class Owning
location: class smcho.OwningAccessor
        Owning o = new Owning();
                   ^

Quel est le problème avec cela? Le code se compile bien sous Eclipse IDE.

12
prosseek

Ok, supposons que le code soit distribué dans les fichiers comme suit

myproject
├── out
└── src
    ├── OwningAccessor.Java
    └── Owning.Java

Accédez à l'invite de commande et changez le répertoire en myproject. Une fois la commande suivante lancée:

javac -d out -sourcepath src src/OwningAccessor.Java

Je viens de le tester et ça fonctionne très bien. Vos classes compilées seront situées dans le dossier out:

.
├── out
│   ├── OwningAccessor.class
│   └── Owning.class
└── src
    ├── OwningAccessor.Java
    └── Owning.Java

La compilation d'une classe déclenchera la compilation de toutes les autres classes dépendantes. Le compilateur les recherchera automatiquement dans le dossier src.

17
Edwin Dalorzo

Assurez-vous de compiler à la fois Owning.Java et OwningAccessor.Java, comme suit:

javac -cp . Owning.Java OwningAccessor.Java

Eclipse compile tous les fichiers nécessaires pour vous, d’où leur efficacité.

13
Kninnug

Essayez de créer un exemple de chemin source correct: 

 javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\c:\JavaProjects\singleton\src\com\company\MySingleton.Java 
 
 javac - d temp -sourcepath c:\awork\JavaProjects\singleton\src\c:\JavaProjects\singleton\src\com\company\Main.Java 

Dans "temp" nous allouons des ressources et avec -sourcepath nous indiquons où sont les fichiers .Java.

1
luciano

Donc, dans un répertoire nommé D:\Automation, il y a un fichier Demo.Java qui renvoie cette erreur, dans cmd alors que vous êtes dans D:\Automation, vous devez: - 1) cd .. // will sortez du répertoire Automation. En D:> 2) javac Automation\Demo.Java

cela va compiler votre fichier - Demo.Java

0
Bhuvnesh Incedo