Quelle est la différence entre le chemin de classe et le chemin de construction


86

Je suis confus avec ces deux termes.

Que dois-je faire également pour créer un fichier dans le dossier src d'un projet Spring MVC? Lorsque je crée à l'aide d'un objet File, il crée le fichier dans C: \ SpringSourceTool ... Je suppose que c'est ClassPath, non?

Comment puis-je obtenir le applicationcontextdossier ou la racine de l'application?

Réponses:


100

Le chemin de construction est utilisé pour créer votre application. Il contient tous vos fichiers source et toutes les bibliothèques Java nécessaires à la compilation de l'application.

Le classpath est utilisé pour exécuter l'application. Cela inclut toutes les classes et bibliothèques java nécessaires pour exécuter l'application java. Un Classpath est obligatoire, le chemin par défaut .est utilisé si la machine virtuelle Java ne trouve pas de chemin défini par l'utilisateur. ( CLASSPATHvariable d'environnement, -cpindicateur ou Class-Path:attribut dans un manifeste jar)


Mais javac prend un argument classpath. Peut-on dire que ce paramètre "surchargé" pour spécifier le chemin de construction?
aioobe

4
Non. L' argument classpath est un indice pour le compilateur de ce qu'il devrait s'attendre à être disponible / fourni au moment de l'exécution, puisque vous ne construisez pas toutes les classes que vous utilisez vous-même (par exemple JFC, bibliothèques, ...). Le chemin de construction contient à la fois les dépendances source et / ou source / compilée et où les rechercher.
Johannes Wachter

Lors du développement d'un plugin, j'ai ajouté toutes les bibliothèques nécessaires au chemin de classe, mais je n'ai rien pu importer. Eclipse ne les a pas vus jusqu'à ce que je les ai ajoutés au chemin de construction.
Bax

51

Le classpath est le moyen conventionnel d'indiquer au compilateur Java (standard) et à l'environnement d'exécution Java où trouver les classes compilées. Il s'agit généralement d'une séquence de noms de fichiers JAR et de noms de répertoires. Le chemin de classe utilisé par le compilateur et le système d'exécution ne doit pas nécessairement être le même, mais il devrait généralement l' être , en particulier pour un petit projet.

Buildpath n'est pas une terminologie Java standard. C'est le terme pour la manière la plus riche qu'un IDE typique spécifie la relation entre les «projets» qui composent une application. L'EDI l'utilise pour déterminer le chemin de classe et le chemin source pour compiler le code Java, et le chemin de classe pour l'exécuter. L'EDI utilise également le chemin de construction pour comprendre comment empaqueter votre code et ses dépendances comme (par exemple) un fichier WAR.

Par exemple, un chemin de génération Eclipse pour un projet inclut les autres projets dont il dépend et répertorie tous les JAR de bibliothèque supplémentaires sur lesquels le projet contient / repose. Il répertorie également les packages du projet en cours dont les projets en aval peuvent dépendre.

(Si vous utilisez Maven pour votre projet, le mécanisme du chemin de construction IDE est secondaire aux dépendances déclarées dans les fichiers POM. Par exemple, en utilisant Eclipse avec m2eclipse, le chemin de construction est synthétisé à partir des fichiers POM.)


27

Le chemin d'accès aux classes est utilisé lors de l'exécution pour charger les classes et les ressources compilées.

Le chemin de génération est utilisé au moment de la compilation pour trouver les dépendances nécessaires à la génération de votre projet.


Pourriez-vous dire que le chemin de classe est utilisé pour localiser les .classfichiers (et d'autres ressources compilées), tandis que le chemin de construction est utilisé pour localiser les fichiers source qui doivent être compilés?
Adam

1
@Adam Je ne pense pas que ce soit complètement vrai. Le chemin de construction nécessite parfois des fichiers .class pour compiler les fichiers source. Ainsi, le chemin de construction utilise également le chemin de classe dans les coulisses. Si vous prenez un certain temps pour compiler et exécuter un projet java à l'aide de l'interface de ligne de commande java, vous pouvez le voir. Le javac et la commande java ont tous deux une option classpath car ils peuvent tous les deux en avoir besoin.
intrepistar_88

4

Chaque projet Java a son propre chemin de construction qui spécifie toutes les dépendances requises pour compiler le projet. Ces dépendances peuvent provenir d'autres projets Java dans l'espace de travail, de fichiers d'archive Java .jar ou de dossiers contenant des fichiers .class.

Dans l'environnement CLASSPATH, vous devez spécifier uniquement les fichiers .class (c'est-à-dire les fichiers jar, zip - à l'intérieur des fichiers jar, zip, vous ne trouverez que des classes java) c'est-à-dire que vous aidez Java Virtual Machine (JVM) à trouver les fichiers de classe Java

Que dois-je faire également pour créer un fichier dans le dossier src d'un projet Spring MVC? Lorsque je crée à l'aide d'un objet File, il crée le fichier dans C: \ SpringSourceTool ...

C'est là que la JVM a été démarrée, si vous souhaitez créer le fichier ailleurs, utilisez le chemin relatif à partir d'ici.

Voir ceci et cela pour plus d'informations.


Vous n'avez même pas mentionné le chemin de construction dans votre réponse.
aioobe

4

Je voudrais ajouter à la réponse d'Andreas_D pour expliquer que le chemin de construction est requis par l'EDI / compilateur pour localiser les packages et les classes externes utilisés par votre code. Nous les appelons parfois des «dépendances» .

NB: Ces paquets externes peuvent être empaquetés dans un fichier .jar compressé ou bien, il peut y avoir plusieurs fichiers jar emballés dans une «bibliothèque» . Une bibliothèque ou un groupe de bibliothèques constitue souvent un «cadre» .

Si votre code nécessite du code écrit par d'autres, vous pouvez les importer dans votre classe à l'aide de la importcommande. Cependant, cette commande en elle-même est insuffisante car le compilateur ou l'EDI a besoin de savoir où se trouvent ces classes. Vous spécifiez cela dans le chemin de construction .

D' classpathautre part, indique à la JVM exécutant votre application où trouver les dépendances lors de l'exécution réelle de votre code.

A noter également: Classpath est destiné à être utilisé par la JVM.

Le chemin de construction est destiné à être utilisé par l'IDE / compilateur et est un moyen de construire le chemin de classe à partir de votre environnement de développement. Lorsque vous configurez votre chemin de compilation via votre IDE, vous configurez également un fichier caché dans votre projet appelé .classpath. Ceci est utilisé pour fournir le chemin de classe à JVM lors du déploiement.


1

Classpath ( de Wikipedia ):

Semblable au comportement de chargement dynamique classique, lors de l'exécution de programmes Java, la machine virtuelle Java trouve et charge les classes paresseusement (elle ne charge le bytecode d'une classe que lorsque la classe est utilisée pour la première fois). Le classpath indique à Java où chercher dans le système de fichiers les fichiers définissant ces classes.

La machine virtuelle recherche et charge les classes dans cet ordre:

classes d'amorçage: les classes qui sont fondamentales pour la plateforme Java (comprenant les classes publiques de la bibliothèque de classes Java et les classes privées nécessaires pour que cette bibliothèque soit fonctionnelle).

classes d'extension: packages qui se trouvent dans le répertoire d'extension du JRE ou du JDK,

jre / lib / ext / packages et bibliothèques définis par l'utilisateur

Par défaut, seuls les packages de l'API standard JDK et les packages d'extension sont accessibles sans qu'il soit nécessaire de définir où les trouver. Le chemin de tous les packages et bibliothèques définis par l'utilisateur doit être défini dans la ligne de commande (ou dans le manifeste associé au fichier Jar contenant les classes).

En termes simples, pendant que votre programme est en cours d'exécution, la JVM ne charge les classes que si nécessaire. Lorsqu'une classe est nécessaire, la JVM dépendra du chemin d'accès aux classes pour savoir où charger le bytecode (c'est-à-dire: .classfichiers).

Le chemin de construction , en revanche, est généralement utilisé par un IDE, tel qu'Eclipse, pour savoir où rechercher les bibliothèques supplémentaires requises pour compiler le code source d'un projet. Le chemin de compilation n'est pas utilisé pendant l'exécution.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.