为什么 package-info.java 很有用?

当我在 Java 项目上运行 CheckStyle 时,它对某些类显示 Missing package-info.java file.,但不是所有类。我真搞不懂为什么这条信息只是偶尔出现。此外,我的项目在没有包 -info.java 的情况下运行得非常好。

Java 包是做什么的? 我真的需要它来完成我的 Java 项目吗?

83721 次浏览

Java 文件允许添加 javadoc 来记录整个包。

如果您不关心丢失的包文档,那么忽略这个警告或者禁用 检查 JavadocPackage

它用于为包生成 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

注释

使用 package-info.java 的另一个好理由是添加默认的 注释< em > FindBugs 使用。例如,如果你把它放在你的包信息文件中:

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

然后,当在该包中的代码上运行 findbug 时,假定所有方法和字段都是非空的,除非您使用 @CheckForNull对它们进行注释。这比要求开发人员向每个方法和字段添加 @NonNull注释要好得多,也更加简单。

不仅是一些 findbug 注释,而且许多常见库中的 java 注释都使用 java.lang.annotation.ElementType.PACKAGE类型作为它们自己的 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)。

Package-info. java是一个 Java 文件,可以添加到任何 Java 源代码包中。它用于根据名称在“包”级别提供信息。 它包含包中使用的文档和注释。

答案中已经提供了 javadoc 示例,下面部分解释了它在注释情况下的工作原理。

例如,在下面的文件中,它用 org.jadira.usertype.dateandtime.joda. PersisentDateTime“替换”joda.time. DateTime 的出现

@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找到