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?
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
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.
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).
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 .
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