Cette section explique comment définir le chemin de compilation Java, c'est-à-dire le chemin d'accès aux classes utilisé pour la création d'un projet Java. Un chemin d'accès aux classes est un tableau contenant des entrées de chemins d'accès aux classes répertoriées pour les types disponibles, sous la forme d'une source ou sous forme binaire, utilisées pour rechercher les types disponibles. L'ordre de ces entrées définit la priorité des types disponibles.
Le chemin de compilation Java gère la structure d'un élément de projet Java, étant donné que toutes les racines de fragments de package proviennent directement du chemin de compilation Java (chaque entrée correspond à une ou plusieurs racines de fragments de package. Reportez-vous à getPackageFragmentRoots).
Cette section ne traite pas du chemin d'exécution Java qui peut être défini séparément. Reportez-vous à la section relative à l'exécution de programmes Java.
Vous pouvez modifier le chemin de compilation d'un projet à l'aide d'un programme en utilisant
setRawClasspath pour l'élément Java du projet correspondant, par exemple :
IProject project = ... // obtention d'une ressource de projet
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
Il existe une variante de setRawClasspath
qui permet de définir le chemin de compilation Java et l'emplacement de sortie du projet en même temps.
Le chemin de compilation Java est conservé dans un fichier appelé '.classpath' à l'emplacement du projet. Ce fichier permet de partager les paramètres du chemin de compilation Java avec d'autres par le biais d'un référentiel de code source. N'éditez pas ce fichier manuellement car il risque d'être corrompu.
Vous pouvez définir les entrées de chemin d'accès aux classes à l'aide des méthodes de fabrique (factory) JavaCore, de sorte qu'elles renvoient à l'un des éléments suivants :
Exemple d'entrée contenant le dossier source 'src' du projet 'MyProject' :
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
Exemple d'entrée contenant le dossier de fichiers de classe 'lib' du projet 'MyProject' :
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //aucune source
null, //aucune source
false); //non exporté
Exemple d'entrée contenant un fichier JAR externe avec connexion de la source :
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), //emplacement de la bibliothèque
new Path("d:/lib/foo_src.zip"), //emplacement de l'archive source
new Path("src"), //chemin d'accès à la racine de l'archive source
true); //exporté
Exemple d'entrée contenant le projet prérequis 'MyFramework', exporté implicitement vers des projets dépendants :
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exporté
Exemple d'entrée contenant une bibliothèque à laquelle il est indirectement fait référence pour l'utilisation d'une variable 'HOME', où la connexion de la source est également définie à l'aide des variables 'SRC_HOME' et 'SRC_ROOT' :
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), //emplacement de la bibliothèque
new Path("SRC_HOME/foo_src.zip"), //emplacement de l'archive source
new Path("SRC_ROOT"), //chemin de la racine de l'archive source
true); //exporté
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); //aucune progression
Exemple d'entrée comportant un conteneur de bibliothèques de classes système :
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // conteneur 'JDKLIB' + précision 'default'
false); //non exporté
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // valeur de 'myProject'
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Basic JDK library container"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
Il est également possible d'effectuer une requête pour le chemin d'accès aux classes résolu d'un projet avec getResolvedClasspath. Cette opération déclenche l'initialisation de la ou des variables impliquées et du ou des conteneurs le cas échéant. De nombreuses opérations liées au modèle Java entraînent la résolution du chemin de compilation Java, comme le calcul des racines des fragments de package d'un projet.