Lorsque j'exécute CheckStyle sur mon projet Java, cela indique Missing package-info.java file.
pour certaines classes, mais pas toutes. Je ne peux pas vraiment comprendre pourquoi ce message n'apparaît que parfois. De plus, mon projet fonctionne parfaitement sans package-info.java.
Que fait le package-info.java? En ai-je vraiment besoin pour mes projets Java?
java
maven
checkstyle
Socrate
la source
la source
Réponses:
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 sur le
com.domain
package pour le package:Exemple de résultat: https://docs.oracle.com/javase/7/docs/api/java/awt/package-summary.html
la source
Example result
est-ce le readme.md?Annotations
Une autre bonne raison d'utiliser package-info.java est d'ajouter des annotations par défaut à utiliser par FindBugs . Par exemple, si vous mettez ceci dans votre fichier package-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 supposés être non nuls sauf si vous les annotez avec
@CheckForNull
. C'est beaucoup plus agréable et infaillible que de demander aux développeurs d'ajouter des@NonNull
annotations à chaque méthode et champ.la source
Non seulement certaines annotations findbugs, mais beaucoup d'annotations java dans les bibliothèques communes ont le
java.lang.annotation.ElementType.PACKAGE
type comme l'une des valeurs possibles de leur proprejava.lang.annotation.Target
annotation, 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
package-info.java
fichier serait le fichier dans lequel vous pouvez placer de telles annotations (avec le javadoc).la source
Un fichier package-info.java permet d'ajouter javadoc pour documenter un package entier. 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 package manquante, ignorez l'avertissement ou désactivez la vérification JavadocPackage .
la source
Le package-info.java est un fichier Java qui peut être ajouté à n'importe quel package source Java. Il est utilisé pour fournir des informations au niveau du «package» selon son nom. Il contient la documentation et les annotations utilisées dans le package.
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 "remplacer" l'occurance de joda.time.DateTime par 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 avec lesquelles peuvent être utilisées pour effectuer différentes choses au niveau du «package». Il peut être trouvé à https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html
la source