web-dev-qa-db-fra.com

Pourquoi package-info.Java est-il utile?

Lorsque j'exécute CheckStyle sur mon projet Java, il indique Missing package-info.Java file. pour certaines classes, mais pas toutes. Je ne peux pas vraiment comprendre pourquoi ce message apparaît seulement parfois. De plus, mon projet fonctionne parfaitement sans le paquet-info.Java.

Que fait le paquet-info.Java? Est-ce que j'en ai vraiment besoin pour mes projets Java?

43
Socrates

Il est utilisé pour générer des javadocs pour un package.

/**
* Domain classes used to produce .....
* <p>
* These classes contain the ......
* </p>
*
* @since 1.0
* @author somebody
* @version 1.0
*/
package com.domain;

Générera des informations de package pour le package com.domain:

Exemple de résultat: https://docs.Oracle.com/javase/7/docs/api/Java/awt/package-summary.html

57
m-szalik

Annotations

Une autre bonne raison d’utiliser package-info.Java est d’ajouter par défaut annotations à utiliser par FindBugs . Par exemple, si vous mettez ceci dans votre fichier de paquet-info:

@DefaultAnnotation(NonNull.class)
package com.my.package;

puis, lorsque findbugs s'exécute sur le code de ce package, toutes les méthodes et tous les champs sont considérés comme non nuls sauf si vous les annotez avec @CheckForNull. C’est beaucoup plus agréable et plus sûr que de demander aux développeurs d’ajouter des annotations @NonNull à chaque méthode et à chaque champ.

24
mdhirsch

Non seulement certaines annotations findbugs, mais de nombreuses annotations Java dans les bibliothèques communes ont le type Java.lang.annotation.ElementType.PACKAGE comme l'une des valeurs possibles de leur propre annotation Java.lang.annotation.Target, par exemple:

com.google.gwt.core.client.js.JsNamespace
com.querydsl.core.annotations.Config
com.Sun.xml.bind.XmlAccessorFactory
groovy.transform.BaseScript
Java.lang.Deprecated
javax.annotation.Generated
javax.xml.bind.annotation.XmlAccessorOrder
org.hibernate.annotations.TypeDef
net.sf.ehcache.pool.sizeof.annotations.IgnoreSizeOf
org.Apache.Hive.common.HiveVersionAnnotation
org.Apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeAction
org.codehaus.commons.nullanalysis.NotNullByDefault
org.Eclipse.persistence.oxm.annotations.XmlNameTransformer
org.glassfish.jersey.Beta
org.jgroups.annotations.Experimental

et beaucoup plus.

Ce fichier package-info.Java serait le fichier où vous pouvez placer de telles annotations (avec le javadoc).

6
Rene Mazala

Un fichier package-info.Java permet d'ajouter javadoc pour documenter tout un paquet. Voir http://docs.Oracle.com/javase/7/docs/api/Java/applet/package-summary.html par exemple. 

Si vous ne vous souciez pas de la documentation du paquet manquant, ignorez l’avertissement ou désactivez la vérification JavadocPackage .

5
JB Nizet

Package-info.Java est un fichier Java qui peut être ajouté à n’importe quel paquet source Java. Il est utilisé pour fournir des informations au niveau "paquet" conformément à son nom . Il contient la documentation et les annotations utilisées dans le paquet.

l’exemple javadoc est déjà fourni dans la réponse. La partie ci-dessous explique comment cela fonctionne en cas d’annotations.

Par exemple, dans le fichier ci-dessous, il est utilisé pour "substituer" l'occurrence de joda.time.DateTime avec org.jadira.usertype.dateandtime.joda.PersistentDateTime

@TypeDefs({
    @TypeDef(name = "PersistentDateTime", typeClass = PersistentDateTime.class, defaultForType=DateTime.class)})

package xyz.abc;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.jadira.usertype.dateandtime.joda.PersistentDateTime;
import org.joda.time.DateTime; 

Il existe un certain nombre d'annotations disponibles qui peuvent être utilisées pour effectuer différentes tâches au niveau du "package". Vous pouvez le trouver à https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html

0
subodhkarwa