Un package est un mécanisme d’organisation qui permet de :
com.company.Client
org.other.Client
java.io
java.net
public
protected
java.util.ArrayList
Un package est déclaré en premier dans un fichier .java :
package nom.du.package; // doit être la première instruction (hors commentaires) public class MaClasse { // ... }
Exemple :
package com.monprojet.model; public class Client { // ... }
java.lang
String
java.util
com.monprojet.model
org.monentreprise.utils
Pour utiliser une classe d’un autre package, on utilise le mot-clé import :
import java.util.ArrayList; // on importe une classe spécifique import java.util.*; // on importe toutes les classes du package (déconseillé pour la lisibilité)
import com.monprojet.model.Client; public class Main { public static void main(String[] args) { Client client = new Client(); // Utilisation de la classe Client } }
On peut utiliser le nom qualifié (avec le package) pour accéder à une classe sans import (mais c’est moins pratique):
com.monprojet.model.Client client = new com.monprojet.model.Client();
Cas d’usage : Éviter les conflits de noms (choisir entre java.util.Date et java.sql.Date) ou utiliser une classe ponctuellement.
java.util.Date
java.sql.Date
public class MaClasse { ... }
protected int monAttribut;
class MaClasse { ... }
private
private String secret;
Déclarer le package dans le fichier .java :
package com.monprojet.model; public class Client { ... }
src/ └── com/ └── monprojet/ └── model/ └── Client.java
Compiler en incluant le chemin du package : javac -d . com/monprojet/model/Client.java
javac -d . com/monprojet/model/Client.java
com.monentreprise
import.*
model
controller
utils
package-info.java
Structure du projet :
src/ └── com/ └── monprojet/ ├── model/ │ ├── Client.java │ └── package-info.java └── utils/ └── StringUtils.java
Fichier Client.java :
package com.monprojet.model; public class Client { private String nom; private String email; public Client(String nom, String email) { this.nom = nom; this.email = email; } public String getNom() { return nom; } public String getEmail() { return email; } }
Fichier Main.java (dans un autre package) :
import com.monprojet.model.Client; public class Main { public static void main(String[] args) { Client client = new Client("Clara Lucciani", "clara@Lucciani.fr"); System.out.println("Client: " + client.getNom()); } }
Le fichier package-info.java est un fichier spécial en Java qui permet de documenter un package et de définir des annotations au niveau du package.
Il est utilisé pour :
/** ... */
/** Ce package contient les modèles de données. */
@Deprecated
@Deprecated package com.monprojet.old;
/** * Description du package. * Ce package contient les classes liées aux modèles de données. */ package com.monprojet.model;
Placement : Ce fichier doit être placé à la racine du package (com/monprojet/model/package-info.java).
Contenu : Uniquement une déclaration de package et des commentaires Javadoc.
@Deprecated package com.monprojet.old; import java.lang.annotation.*; // Si des annotations personnalisées sont utilisées
Annotations courantes :
@Deprecated : Marque le package comme obsolète. @SuppressWarnings : Ignore certains avertissements du compilateur pour tout le package.
src/ └── com/ └── monprojet/ ├── model/ │ ├── Client.java │ └── package-info.java // fichier de documentation └── old/ ├── AncienneClasse.java └── package-info.java // fichier avec annotation @Deprecated
Fichier package-info.java pour la documentation :
/** * Package contenant les modèles de données de l'application. * Les classes de ce package représentent les entités métiers (ex. : Client, Produit). * * @since 1.0 * @author PB */ package com.monprojet.model;
Fichier package-info.java pour les annotations :
/** * Ce package est obsolète et sera supprimé dans la version 2.0. * Utilisez plutôt `com.monprojet.newpackage`. */ @Deprecated(since = "1.5", forRemoval = true) package com.monprojet.old;
Quand on génère la Javadoc avec la commande javadoc -d doc/ src/, le contenu de package-info.java apparaîtra en haut de la page du package dans la documentation générée.
javadoc -d doc/ src/
Exemple de sortie Javadoc :
Package com.monprojet.model Package contenant les modèles de données de l'application. Les classes de ce package représentent les entités métiers (ex. : Client, Produit). Classes Class Description Client Représente un client. Produit Représente un produit.
@SuppressWarnings