2014-02-28 15 views
21

Wenn ich CheckStyle über mein Java-Projekt ausführen, heißt es Missing package-info.java file. für einige Klassen, aber nicht alle von ihnen. Ich kann nicht wirklich herausfinden, warum diese Nachricht nur manchmal erscheint. Außerdem läuft mein Projekt ohne Paket-info.java einwandfrei.Warum ist package-info.java nützlich?

Was macht die package-info.java? Brauche ich es wirklich für meine Java-Projekte?

+2

Sie können sie zum Dokumentieren oder Kommentieren auf Paketebene verwenden. Siehe [diese Frage] (http://stackoverflow.com/questions/3644726/javadoc-package-html-or-package-info-java). – McDowell

+0

Ich bin ein Fan von package-info.java die ganze Zeit, aber ich frage mich, ob ein README.md im Jahr 2018 besser geeignet ist –

+0

@ Sridhar-Sarnobat Neben package-info.java und README.md von Git gibt es die Möglichkeit, dass Confluene möglicherweise auch Jira-Tickets hinzufügt. So können auch Diagramme, Workflows oder Videos hinzugefügt werden. – Socrates

Antwort

14

Ein weiterer guter Grund package-info.java zu verwenden Standard Anmerkungen zur Verwendung von findbugs hinzufügen

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

Werden Paketinformationen für com.domain Paket erzeugen. Zum Beispiel, wenn Sie dies in Ihrer Paket-Info-Datei:

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

dann, wenn findbugs in diesem Paket auf dem Code ausgeführt wird, werden alle Methoden und Felder gelten als nicht null sein, wenn Sie sie mit @CheckForNull mit Anmerkungen versehen. Dies ist viel netter und narrensicherer, als Entwickler dazu auffordern, jeder Methode und jedem Feld @NonNull Annotationen hinzuzufügen.

1

Nicht nur einige wenige findbugs Anmerkungen, aber eine Menge von Java-Annotationen in gemeinsamen Bibliotheken haben die java.lang.annotation.ElementType.PACKAGE Typ als eine der möglichen Werte ihrer eigenen java.lang.annotation.Target Anmerkung, z.B .:

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 

und vieles mehr.

Diese package-info.java Datei wäre die Datei, wo man solche Anmerkungen platzieren kann (zusammen mit dem javadoc).