Voici la signification des différentes concepts de configuration d'un projet de Eclipse.
PDE
Le PDE, tire son nom de l'abréviation de l'anglicisme «Plug-in Development Environment». Il propose des outils permettant de créer, développer, tester, déboguer, construire et déployer des plugiciels Eclipse, des fragments, des fournitures, des mises à jour de sites et des produits RCP. Le PDE fournit également des outils OSGi complets, cet élément en fait un environnement idéal pour la programmation par composantes, et pas seulement pour le développement de plugiciels d'Eclipse. La PDE est divisée en 3 composantes principales :
- UI : C'est un ensemble complet de modèles, d'outils et d'éditeurs pour développer des plugiciels et du cadre d'application OSGi.
- Outils API (API Tools) : Ce sont des outils d'aide à la documentation et à la maintenance de l'API
- Construire (Build) : Ce sont des outils et des scripts basés sur Ant pour automatiser les processus de construction.
Voici les principaux concepts du PDE :
- Extensions et points d'extension : Une règle de base pour la construction de systèmes logiciels modulaires est d'éviter un couplage étroit entre les composants. Si les composants sont étroitement intégrés, il devient difficile d'assembler les pièces dans des configurations différentes ou de remplacer un composant avec une intégration différente sans provoquer une vague de modifications dans le système. Le couplage lâche dans Eclipse est réalisé partiellement via le mécanisme des extensions et des points d'extension. La métaphore la plus simple pour décrire les extensions et les points d'extension est celle des prises électriques. La prise, ou socket, est le point d'extension; la fiche, ou l'ampoule s'y connectant, l'extension. Comme pour les prises électriques, les points d'extension se présentent sous une grande variété de formes et de tailles, et seules les rallonges conçues pour ce point d'extension s'y adapteront. Lorsqu'un plugiciel souhaite autoriser d'autres plugiciel à étendre ou personnaliser des parties de ses fonctionnalités, il déclare un point d'extension. Le point d'extension déclare un contrat, généralement une combinaison d'interfaces de balise XML et de Java, auquel les extensions doivent se conformer. Les plugiciels souhaitant se connecter à ce point d'extension doivent intégrer ce contrat dans leur extension. L'attribut clef est que le plugiciels en cours d'extension ne sait rien du plugiciel s'y connectant au-delà de la portée de ce contrat de point d'extension. Il permet aux plugiciels construits par différentes personnes ou entreprises d'interagir de manière transparente, même sans qu'ils en sachent beaucoup. La plate-forme Eclipse a de nombreuses applications du concept d'extension et de point d'extension. Certaines extensions sont entièrement déclaratives; c'est-à-dire qu'ils ne contribuent pas au code. Par exemple, un point d'extension fournit des liaisons de clef personnalisées et un autre définit des annotations de fichier personnalisées, appelées marqueurs. Aucun de ces points d'extension ne nécessite de code pour le compte de l'extension. Une autre catégorie de points d'extension sert à remplacer le comportement par défaut d'une composante. Par exemple, les outils de développement Java incluent un formateur de code, mais fournissent également un point d'extension pour les formateurs de code tiers à brancher. Le plugiciel de ressources comporte un point d'extension permettant à certains plugiciels de remplacer l'intégration du fichier de base, les opérations telles que le déplacement et la suppression. Une autre catégorie de points d'extension est utilisée pour regrouper les éléments associés dans l'interface utilisateur. Par exemple, les points d'extension permettant de fournir des vues, des éditeurs et des assistants à l'interface utilisateur permettent au plugiciel d'interface utilisateur de base de regrouper des fonctionnalités communes, telles que le regroupement de tous les assistants d'importation dans un seul dialogue et la définition d'une manière cohérente de présentation des contributions d'interface utilisateur d'une grande variété d'autres plugiciels.
- Plugiciels (Plug-in) : Un plugiciel est utilisé pour regrouper votre code dans une unité modulaire, extensible et partageable. Les plugiciels sont modulaires car chaque plugiciels contient une partie du code. Le plugiciel spécifie les autres plugiciel (ou paquet Java) dont il a besoin d'être disponible pour s'exécuter et il spécifie également l'ensemble des paquets Java qu'il fournit. Un programme ou produit basé sur Eclipse contiendra plusieurs plugiciel, pouvant être ajoutés, remplacés ou supprimés pour modifier les fonctionnalités du programme. Les plugiciels sont extensibles à l'aide d'extensions et de points d'extension. Un plugiciel peut fournir un ou plusieurs points d'extension afin que d'autres plugiciel puissent ajouter des fonctionnalités supplémentaires. Un plugiciel peut également fournir des extensions pour se connecter à d'autres plugiciels. Les plugiciels sont partageables. Un plugiciels peut être exporté sous forme de répertoire ou de fichier avec un extension .jar pouvant être ajouté à d'autres applications. Les plugiciels peuvent être regroupés en fonctionnalités pouvant être distribuées et installées dans des applications. Les plugiciels Eclipse sont basés sur le cadre d'application OSGi. Le OSGi est utilisé pour gérer les plugiciels dans une application Eclipse. Un plugiciel doit contenir un fichier de manifeste avec des entêtes OSGi valides pour le nom et la version du plugiciel, les extensions et les fonctionnalités de points d'extension ajoutées par Eclipse en plus de OSGi. Pour utiliser des extensions, vous devez fournir un fichier plugin.xml. Le PDE fournit un projet complet et un éditeur pour créer et éditer ces fichiers.
- Fragment : Un fragment est utilisé pour remplacer ou étendre les fonctionnalités d'un plugiciel existant. Une utilisation courante des fragments consiste à mettre en fragments un code spécifique à l'environnement (système d'exploitation, architecture,...). Selon l'environnement, le plugiciels est installé dans le code du plugiciels de base, avec le fragment correct pouvant être installé. Les fragments sont également parfaits pour les fonctionnalités d'expédition telles que les langages ou les paquets de maintenance traînant généralement les produits initiaux pendant quelques mois. Lorsqu'un fragment est détecté par la plate-forme et que son plugiciels parent est trouvé, les bibliothèques, les extensions et les points d'extension du fragment sont «fusionnés» avec ceux du plugiciels parent. Bien que ce mécanisme de fusion soit efficace du point de vue de l'exécution, les développeurs doivent visualiser les fragments comme des entités distinctes lorsqu'ils travaillent dessus. Le PDE fournit un support complet pour le développement de fragments. Les fragments peuvent être considérés comme des «plugiciel limité». Ils ont toutes les capacités des plugiciels habituels, mais n'ont aucune notion de cycle de vie logiciel. Les fragments n'ont pas de classe de niveau supérieur avec les méthodes «startup» et «shutdown». Pour créer un fragment, utilisez l'assistant New Fragment Project. L'édition de fragments est très similaire à l'édition de plugiciels.
Java Compiler
Cette partie contient la configuration du compilateur Java associé à un projet.
Errors/Warning
Ces options permettent de déterminer le comportement que doit avoir Eclipse avec Java suite à des messages d'erreurs ou d'attention :
Code style : Cette catégorie d'option permet de déterminer le comportement des styles de code
- Non-static access to a static member : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'un champ ou une méthode statique est accédé avec un récepteur d'expression. Une référence à un membre statique doit être qualifiée avec un nom de type.
- Indirect access to a static member : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'un champ ou une méthode statique est accédé indirectement. Un champ statique d'une interface doit être qualifié avec le nom du type déclarant.
- Unqualified access to instance field : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera un accès au champ n'étant pas qualifié (par exemple, omet un «this»).
- Access to a non-accessible member of an enclosing type : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il émulera l'accès à un membre non accessible d'un type englobant. De tels accès peuvent avoir des conséquences sur les performances.
- Parameter assignment : L'attribution d'une valeur à un paramètre est généralement considérée comme une programmation de style médiocre. Lorsque cette option est activée, le compilateur signalera ce scénario sous forme d'erreur ou d'avertissement.
- Non-externalized strings : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement pour le littéral String non externalisé (c'est-à-dire non étiqueté avec «//$NON-NLS-<n>$») ou pour les balises String non externalisées n'appartenant pas à une chaîne de caractères String.
- Undocumented empty block : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une instruction de bloc vide sans commentaire explicatif.
- Resource not managed via try-with-resource (1.7 or higher) : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement si une variable locale contient une valeur de type 'java.lang.AutoCloseable' et si la méthode 'close()' est explicitement appelée sur cette ressource, mais pas la ressource n'est pas géré par un bloc try-with-resources.
- Method with a constructor name : Nommer une méthode avec un nom de constructeur est généralement considéré comme une programmation de style médiocre. Lorsque cette option est activée, le compilateur signalera ce scénario sous forme d'erreur ou d'avertissement.
- Method can be static : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement pour les méthodes privées ou finales faisant uniquement référence à des membres statiques.
- Method can potentially be static : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement pour les méthodes n'étant ni privées ni finales et faisant uniquement référence à des membres statiques. Notez que les méthodes peuvent être remplacées dans une sous-classe. Ainsi, si vous créez une méthode «potentiellement statique», il risque de casser les clients existants.
Potential programming problems : Cette catégorie d'option permet d'indiquer le comportement du compilateur par rapport aux problèmes de programmation potentiel.
- Comparing identical values ('x == x') : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement si une comparaison implique des opérandes identiques (par exemple, «x == x»).
- Assignment has no effect (e.g. 'x = x') : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'une affectation n'aura aucun effet (par exemple, «x = x»).
- Possible accidental boolean assignment (e.g. 'if (a = b)') : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une affectation booléenne accidentelle (par exemple, «if (a = b)»).
- Boxing and unboxing conversions : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une conversion de boite ou de déboitement. La substitution automatique peut affecter négativement les performances.
- Using a char array in string concatenation : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'une expression char [] est utilisée dans les concaténations de chaînes de caractères. Exemple :
- Inexact type match for vararg arguments : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une correspondance de type inexacte pour les paramètres vararg.
- Empty statement : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une instruction vide (par exemple, un point-virgule superflu).
- Unused object allocation : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement lorsqu'il rencontrera un objet alloué n'étant pas utilisé, par exemple.
- Incomplete 'switch' cases on enum : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une instruction switch ne contenant pas de cas default ni d'instruction case pour chaque constante enum de l'énumération référencée.
- Hidden catch block : Situé localement dans une instruction try, certains blocs catch peuvent en cacher d'autres instruction catch. Voici un par exemple typique :
- 'finally' does not complete normally : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'une instruction finally ne se termine pas normalement (par exemple, contient une instruction return).
- Dead code (e.g. 'if (false)') : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement lorsqu'il rencontrera du code mort ou n'étant jamais exécuté (par exemple, «if(false)»).
- Resource leak : Lorsque cette option est activé, le compilateur génère une erreur ou un avertissement si une variable locale contient une valeur de type 'java.lang.AutoCloseable' (compliance ≥ 1.7) ou une valeur de type «java.io.Closable» (compliance ≤ 1.6) et si l'analyse du flux montre que la méthode «close()» n'est pas appelée localement sur cette valeur.
- Potential resource leak : Lorsque cette option est activée, le compilateur génère une erreur ou un avertissement si une variable locale contient une valeur de type «java.lang.AutoCloseable»' (compliance ≥ 1.7) ou une valeur de type «java.io.Closable» (compliance ≤ 1.6) et si l'analyse du flux montre que la méthode «close()» n'est pas appelée localement sur cette valeur pour tous les chemins d'exécution.
- Serializable class without serialVersionUID : Lorsque cette option est activée, le compilateur émettra une erreur ou un avertissement chaque fois qu'un type implémentant «java.io.Serializable» ne contient pas de champ serialVersionUID.
- Missing synchronized modifier on inherited method : Lorsque cette option est activée, le compilateur émettra une erreur ou un avertissement lorsqu'il rencontrera une méthode héritée sans le modificateur synchronisé.
- Class overrides 'equals()' but not 'hashCode()' : Lorsque cette option est activée, le compilateur émettra une erreur ou un avertissement lorsqu'il rencontrera une classe remplaçant «equals()» mais pas «hashCode()».
Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement pour les blocs d'interception cachés correspondant aux exceptions vérifiées.
Name shadowing and conflicts : Cette catégorie d'option permet d'indiquer le comportement du compilateur par rapport aux observations de noms et de conflits.
- Field declaration hides another field or variable : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement si une déclaration de champ cache un autre champ hérité.
- Local variable declaration hides another field or variable : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement si une déclaration de variable locale masque un autre champ ou une autre variable.
- Include constructor or setter method parameters : Lorsque cette option est activé, le compilateur émettra en outre une erreur ou un avertissement si un paramètre de constructeur ou de méthode de définition masque un autre champ ou une autre variable.
- Type parameter hides another type : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement si, par exemple, un paramètre de type d'une classe interne cache un type externe.
- Method does not override package visible method : Une méthode de paquet par défaut n'est pas visible dans un autre paquet et ne peut donc pas être remplacée. Lorsque cette option est activée, le compilateur signalera ce scénario sous forme d'erreur ou d'avertissement.
- Interface method conflicts with protected 'Object' method : Lorsque cette option est activé, le compilateur génère une erreur ou un avertissement chaque fois qu'une interface définit une méthode incompatible avec une méthode Object non héritée. Tant que ce conflit n'est pas résolu, une telle interface ne peut pas être mise en oeuvre. Comme par exemple :
Deprecated and restricted API : Cette catégorie d'option permet d'indiquer le comportement du compilateur par rapport aux éléments obsolète et les restrictions d'API.
- Signal use of deprecated API inside deprecated code : Lorsque cette option est activé, le compilateur signalera l'utilisation de l'API obsolète dans du code obsolète. La gravité du problème est contrôlée avec l'option «Deprecated API».
- Signal overriding or implementing deprecated method : Lorsque cette option est activé, le compilateur signale le remplacement ou l'intégration d'une méthode déconseillée. La gravité du problème est contrôlée à l'aide de l'option «Deprecated API».
- Forbidden reference (access rules) : Lorsque cette option est activé, le compilateur signalera une référence interdite spécifiée dans les règles d'accès.
- Discouraged reference (access rules) : Lorsqu'il est activé, le compilateur signalera une référence découragée spécifiée dans les règles d'accès.
Unnecessary code : Cette catégorie d'option permet d'indiquer le comportement du compilateur par rapport aux codes non nécessaires.
- Value of local variable is not used : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'une variable locale est déclarée mais que sa valeur n'est jamais utilisée dans son étendue.
- Value of parameter is not used : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'un paramètre est déclaré mais que sa valeur n'est jamais utilisée dans son étendue.
- Ignore in overriding and implementing methods : Lorsque cette option est activé, le compilateur n'émettra pas d'erreur ni d'avertissement chaque fois qu'un paramètre est déclaré mais jamais utilisé dans son étendue dans une méthode substituant ou intégrant une autre méthode.
- Ignore parameters documented with '@param' tag : Lorsque cette option est activé, le compilateur ne génère pas d'erreur ni d'avertissement lorsqu'un paramètre non lu est documenté avec une balise '@param'.
- Unused type parameter : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement pour le paramètre de type non utilisé.
- Unused import : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement concernant la référence d'importation non utilisée.
- Unused private member : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'un membre privé est déclaré mais jamais utilisé dans la même unité.
- Unnecessary 'else' statement : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une instruction else inutile.
- Unnecessary cast or 'instanceof' operation : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une opération de conversion ou instanceof inutile.
- Unnecessary declaration of thrown exception : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une déclaration inutile d'une exception levée.
- Ignore in overriding and implementing methods : Lorsque cette option est activé, le compilateur ne génère pas d'erreur ni d'avertissement lorsqu'il rencontre une déclaration inutile d'une exception levée dans une méthode qui remplace ou implémente une autre méthode.
- Ignore exceptions documented with '@throws' or '@exception' tags : Lorsque cette option est activé, le compilateur ne génère pas d'erreur ni d'avertissement chaque fois qu'une déclaration non nécessaire d'une exception levée est documentée avec une balise '@throws' ou '@exception'.
- Ignore 'Exception' and 'Throwable' : Lorsque cette option est activé, le compilateur n'émettra pas d'erreur ni d'avertissement s'il rencontre une déclaration inutile d'exception 'Exception' et 'Throwable'.
- Unused 'break' or 'continue' label : Lorsque cette option est activé, le compilateur émettra une erreur ou un avertissement chaque fois qu'il rencontrera une étiquette "pause" ou "continuer" inutilisée.
- Redundant super interface : Lorsque cette option est activé, le compilateur génère une erreur ou un avertissement chaque fois qu'il rencontre un type d'intégration explicitement d'une interface déjà intégrée par l'un de ses supertypes.
Run Configuration
Cette partie contient les configurations associés à l'exécution d'un projet.
Maven Build (m2)
Le Maven Build permet de gérer la construction d'un projet à l'aide de Maven. Il est divisé en 5 onglets principales et permettent de gérer tous les comportements que doit avoir Maven avec votre projet.
Main : L'onglet Main contient les configurations de base du projet Maven.
- Name : Le champ Name permet d'indiquer le nom de la construction Maven que vous désirez attribué à votre projet. Il peut avoir plusieurs configuration différents de construction pour un même projet, d'où la raison qu'on peut leur attribué un nom distinct.
- Base directory : Le champ base directory permet d'indiquer le dossier racine où situé le code du projet.
- Goals : Le champ Goals permet d'indiquer les phases de construction devant être appliqué par Maven (la commande MVN), soit l'une ou plusieurs des valeurs suivantes : clear, validate, compile, test, package, verify, install ou deploy. Par exemple si vous indiqués «clean install» dans le champ Goals, vous aurez la commande suivante :
- Debug Output : Le champ Debug Output permet d'avoir plus détails sur les erreurs potentielles lors de la construction du projet lorsqu'il affiche les actions effectués dans l'onglet «Console».
- Skip Tests : Le champ Skip Tests permet d'indiquer s'il ne faut pas faire de test sur le projet. Cocher cette case est l'équivalent de la commande MVN suivante :
mvn clean install |
mvn ... -DskipTests |
JRE : L'onglet JRE contient les informations spécifiques au JRE de Java utilisé pour le projet.
- VM arguments : Le champ VM arguments permet d'indiquer les paramètres exécuter par la machine virtuelle de Java, comme par exemple des paramètres mémoire comme ceci :
-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:NewSize=128m |
Refresh L'onglet Refresh contient les informations indiquant le niveau de profondeur dans la reconstruction du projet si des éléments sont déjà présente. Ainsi, grâce à cette option, on peut faire en sorte de reconstruire seulement certaines parties du projet et au économisera du temps dans les tests de certaines du projet.
Source L'onglet Source contient les paquets .jar utilisés pour construire le projet.
Environment L'onglet Environment contient les informations sur les variables d'environnement que doit utiliser le projet. Il est disponible pour toutes les configurations de lancement PDE et Java. Par défaut, l'environnement est hérité du l'environnement d'exécution de l'IDE d'Eclipse. Vous pouvez choisir de remplacer l'environnement ou d'y ajouter des éléments. Les variables spécifiées dans l'onglet remplacent toujours les valeurs de l'environnement natif sous-jacent. Cependant, lorsque l'option «Append environment to native environment» est sélectionnée, l'environnement lancé est créé avec l'environnement natif. Après cette option, les variables de l'onglet remplacent (les variables existantes) ou augmentent l'ensemble des variables d'environnement. Lorsque l'option «Replace native environment with specified environment» est sélectionnée, l'environnement lancé ne comprend que les variables spécifiées dans l'onglet.
Common L'onglet Common contient les informations communes au projet comme l'encodage, et les informations de sauvegarde. Il est disponible pour toutes les configurations de lancement PDE et Java. Une configuration de lancement est enregistrée en tant que fichier XML «.launch» sur le disque. Par défaut, ce fichier est enregistré dans le répertoire «${workspace_loc}/.metadata/.plugins/org.eclipse.debug.core/.launch», où ${workspace_loc} indique l'emplacement de l'espace de travail. Si vous souhaitez partager une configuration de lancement avec des membres de l'équipe, vous avez la possibilité de l'enregistrer en tant que fichier partagé dans l'un de vos projets d'espace de travail (afin de la rendre visible pour le contrôle de version).