2009-12-27 9 views
0

Java newbie. Je suis en train d'exécuter une classe principale java de la ligne cmd et en revenir ClassNotFoundException:JAVA Newbie Alerte: Essayer de lancer la classe Java et obtenir ClassNotFoundException

java -cp class c:\development\eclipse\workspace\Library-Manager-Server\bin\demo\rmi\librarymanager\server\LibraryManagerServer 

-Djava.security.policy="C:\Development\Eclipse\Workspace\Library-Manager-Server\security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin/ file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin/" 

La classe est certainement là, dans le bac (où l'éclipse tombe), mais pour une raison quelconque (probablement trivial), il ne peut pas être trouvé quand je cours la ligne cmd ci-dessus.

Toute aide appréciée!

EDIT # 1: comme certains d'entre vous ont peut-être deviné classname est demo.rmi.librarymanager.server.LibraryManagerServer

EDIT # 2: OK - grâce à des gens suggestions je pense que je suis la bonne syntaxe cette fois mais je suis encore en train ClassNotFoundException mais sur une autre classe dans le package commun:

demo.rmi.librarymanager.common.Library 

Voici la nouvelle ligne de cmd:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin demo.rmi.librarymanager.server.LibraryManagerServer 

-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin" 

Dois-je ajouter le chemin c:/development/eclipse/workspace/Library-Manager-Common/bin (où demo.rmi.librarymanager.common.Library vit) avec c:/development/eclipse/workspace/Library-Manager-Server/bin après -cp comme argument de ligne de commande? Merci à tous pour leur aide et leur patience - Je travaille sur une application RMI et tout fonctionnait bien jusqu'à ce que je travaille à l'intérieur d'eclipse en utilisant le RMI plugin mais maintenant j'ai un peu de mal car je suis relativement nouveau java (comme tu l'as vu de ma question!).

EDIT # 3: Ok je l'ai eu de travail:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin;c:/development/eclipse/workspace/Library-Manager-Common/bin 

demo.rmi.librarymanager.server.LibraryManagerServer 

-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin" 

Merci à tous pour la douche de l'humilité.

+0

quel est l'argument 'class' de -cp? –

+0

oui - c'est quoi cette "classe"? –

+0

sans le nom de la classe, cela va obtenir des votes pour 'pas une vraie question' – bmargulies

Répondre

3

Le CommandLine java est:

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. 

Je pense que je vois votre problème - 'classe' n'est pas un mot-clé; c'est le nom de classe completQualifié avec lequel vous devez le remplacer.

Si vos fichiers de classe sont bin alors la commande pourrait ressembler à:

java -cp bin myClass 

donc peut-être

java -cp bin demo.rmi.librarymanager.server.LibraryManagerServer 

si vous êtes dans le répertoire de votre projet Eclipse.

Notez qu'Eclipse possède des paramètres (que vous pouvez remplacer) pour l'emplacement des classes. J'ai trouvé que différentes versions d'Eclipse ont des versions différentes par défaut. J'ai donc vu bin, classes ou (comme j'utilise maven) target/classes.

+0

merci +1 Je pense que j'ai obtenu la syntaxe en ce moment, obtenir NotFound sur un autre cours - voir edit # 2 . – JohnIdol

2

Cela fonctionnera probablement:

java -cp c:\development\eclipse\workspace\Library-Manager-Server\bin\ demo.rmi.librarymanager.server.LibraryManagerServer 

Cela suppose que vous voulez exécuter la classe LibraryManagerServer dans le package demo.rmi.librarymanager.server.

Notez que si vous utilisez des classes dans des emballages (ce qui est recommandé, sauf pour le test à court ou un code d'apprentissage), vous devez

  • Utilisez le nom complet (y compris emballage) de la classe à dire java. exe quelle classe pour commencer
  • donner comme classpath le répertoire de base sous lequel la hiérarchie de répertoire correspondant à la hiérarchie de package vit
1

à partir de votre commandline Je suppose:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin 
-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 
-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin/ file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin/" 
demo.rmi.librarymanager.server.LibraryManagerServer 

chemins Java utilisent/comme séparateurs, même Widnows, le classpath doit pointer vers la racine de votre hiérarchie de package et la classe à exécuter est donnée en notation paquet par rapport au classpath.