web-dev-qa-db-ja.com

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

JavaプロジェクトでCheckStyleを実行すると、Missing package-info.Java file.一部のクラスではありますが、すべてではありません。このメッセージが時々しか表示されない理由を本当に理解することはできません。さらに、私のプロジェクトはpackage-info.Javaがなくても問題なく動作します。

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

55
Socrates

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

/**
* 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

71
m-szalik

注釈

Package-info.Javaを使用するもう1つの理由は、デフォルトの annotations を使用して FindBugs を追加することです=。たとえば、これをpackage-infoファイルに入れた場合:

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

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

35
mdhirsch

一部のfindbugs注釈だけでなく、一般的なライブラリの多くのJava注釈は、独自のJava.lang.annotation.ElementType.PACKAGE注釈の可能な値の1つとしてJava.lang.annotation.Targetタイプを持っています。

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とともに)配置できるファイルになります。

8
Rene Mazala

Package-info.Javaファイルを使用すると、javadocを追加してパッケージ全体を文書化できます。 http://docs.Oracle.com/javase/7/docs/api/Java/applet/package-summary.html を参照してください。

パッケージドキュメントの欠落を気にしない場合は、警告を無視するか、 JavadocPackage check を無効にします。

5
JB Nizet

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 にあります

1
subodhkarwa