package-info.javaが役立つのはなぜですか?


97

JavaプロジェクトでCheckStyleを実行するとMissing package-info.java file.、一部のクラスについて表示されますが、すべてではありません。このメッセージがたまにしか表示されない理由がよくわかりません。さらに、私のプロジェクトはpackage-info.javaがなくても完全に正常に実行されます。

package-info.javaは何をしますか?Javaプロジェクトに本当に必要ですか?


3
パッケージレベルでの文書化または注釈付けに使用できます。この質問を参照してください。
マクダウェル

私はずっとpackage-info.javaのファンでしたが、2018年にはREADME.mdの方が適しているのではないかと思います
Sridhar Sarnobat

@ Sridhar-Sarnobat Gitのpackage-info.javaとREADME.mdに加えて、ConflueneがJiraチケットも追加する可能性があります。そうすれば、図、ワークフロー、またはビデオも追加できます。
ソクラテス

1
そこに他のコードも書くことができることをご存知ですか?クラスなどのように...奇妙な!
sproketboy 2018年

回答:


106

パッケージのjavadocを生成するために使用されます。

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

パッケージのパッケージ情報を生成しcom.domainます:

結果の例:https//docs.oracle.com/javase/7/docs/api/java/awt/package-summary.html


申し訳ありませんが、どの部分をExample result参照しているのかまだ明確ではありません。それはreadme.mdですか?
shareef 2018年

50

注釈

package-info.javaを使用するもう1つの理由は、FindBugsで使用するデフォルトのアノテーションを追加することです。たとえば、これをpackage-infoファイルに入れると、次のようになります。

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

その後、findbugsがそのパッケージ内のコードで実行されると、注釈を付けない限り、すべてのメソッドとフィールドはnull以外であると見なされます@CheckForNull。これは、開発者@NonNullが各メソッドとフィールドにアノテーションを追加する必要があるよりもはるかに優れており、確実です。


12

一部のfindbugsアノテーションだけでなく、一般的なライブラリの多くのJavaアノテーションにjava.lang.annotation.ElementType.PACKAGEは、独自のjava.lang.annotation.Targetアノテーションの可能な値の1つとしてタイプがあります。例:

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

とはるかに。

このpackage-info.javaファイルは、そのような注釈を(javadocとともに)配置できるファイルになります。



4

package-info.javaは、任意のJavaソース・パッケージに追加することができますJavaファイルです。名前のとおり、「パッケージ」レベルで情報を提供するために使用されます。パッケージで使用されるドキュメントと注釈が含まれています。

javadocの例はすでに回答で提供されています。以下の部分では、注釈の場合の動作について説明します。

たとえば、以下のファイルでは、joda.time.DateTimeの出現を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; 

「パッケージ」レベルでさまざまなことを実行するために使用できる注釈がいくつかあります。それはで見つけることができますhttps://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.