Warum ist package-info.java nützlich?

89

Wenn ich CheckStyle über mein Java-Projekt ausführe, wird dies Missing package-info.java file.für einige Klassen angezeigt , jedoch nicht für alle. Ich kann nicht wirklich herausfinden, warum diese Nachricht nur manchmal erscheint. Außerdem läuft mein Projekt ohne die package-info.java einwandfrei.

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

Sokrates
quelle
3
Sie können sie zum Dokumentieren oder Kommentieren auf Paketebene verwenden. Siehe diese Frage .
McDowell
Ich war die ganze Zeit ein Fan von package-info.java, aber ich frage mich, ob eine README.md 2018 besser geeignet ist
Sridhar Sarnobat
@ Sridhar-Sarnobat Neben package-info.java und README.md von Git besteht die Möglichkeit, dass Confluene möglicherweise auch Jira-Tickets hinzufügt. Auf diese Weise können auch Diagramme, Workflows oder Videos hinzugefügt werden.
Sokrates
1
Wussten Sie, dass Sie dort auch anderen Code schreiben können? Wie Klassen etc ... Seltsam!
Sproketboy

Antworten:

100

Es wird verwendet, um Javadocs für ein Paket zu generieren.

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

Generiert Paketinformationen für das com.domainPaket:

Beispielergebnis: https://docs.oracle.com/javase/7/docs/api/java/awt/package-summary.html

m-szalik
quelle
Entschuldigung, immer noch nicht klar, auf welchen Teil Sie sich beziehen, Example resultist es die readme.md?
Shareef
47

Anmerkungen

Ein weiterer guter Grund zu verwenden package-info.java ist standardmäßig hinzufügen Anmerkungen zur Verwendung von FindBugs . Wenn Sie dies beispielsweise in Ihre Paketinfo-Datei einfügen:

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

Wenn dann findbugs für den Code in diesem Paket ausgeführt wird, wird angenommen, dass alle Methoden und Felder nicht null sind, es sei denn, Sie kommentieren sie mit @CheckForNull. Dies ist viel schöner und narrensicherer, als wenn Entwickler @NonNulljeder Methode und jedem Feld Anmerkungen hinzufügen müssen.

mdhirsch
quelle
10

Nicht nur einige Findbugs-Annotationen, sondern auch viele Java-Annotationen in allgemeinen Bibliotheken haben den java.lang.annotation.ElementType.PACKAGETyp als einen der möglichen Werte ihrer eigenen java.lang.annotation.TargetAnnotation, z.

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.javaDatei ist die Datei, in der Sie solche Anmerkungen (zusammen mit dem Javadoc) platzieren können.

Rene Mazala
quelle
3

Die package-info.java ist eine Java-Datei, die zu jedem Java- Quellpaket hinzugefügt werden kann. Es wird verwendet, um Informationen auf "Paketebene" gemäß ihrem Namen bereitzustellen. Es enthält Dokumentation und Anmerkungen, die im Paket verwendet werden.

Das Javadoc-Beispiel ist bereits in der Antwort enthalten. Im folgenden Teil wird erläutert, wie es bei Anmerkungen funktioniert.

In der folgenden Datei wird es beispielsweise verwendet, um das Auftreten von joda.time.DateTime durch org.jadira.usertype.dateandtime.joda.PersistentDateTime zu "ersetzen"

@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; 

Es gibt eine Reihe von Anmerkungen, mit denen verschiedene Dinge auf "Paket" -Ebene ausgeführt werden können. Es finden Sie unter https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html

subodhkarwa
quelle