【问题标题】:Why is package-info.java useful?为什么 package-info.java 有用?
【发布时间】:2014-04-01 11:23:12
【问题描述】:

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

package-info.java 有什么作用?我的 Java 项目真的需要它吗?

【问题讨论】:

  • 您可以使用它们在包级别进行记录或注释。见this question
  • 我一直是 package-info.java 的粉丝,但我想知道 README.md 是否更适合 2018 年
  • @Sridhar-Sarnobat 除了来自 Git 的 package-info.java 和 README.md 之外,Confluene 也有可能添加 Jira 票证。这样也可以添加图表、工作流程或视频。
  • 你知道你也可以在那里写其他代码吗?像课程等......很奇怪!

标签: java maven checkstyle


【解决方案1】:

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

【讨论】:

  • 抱歉还是不清楚你指的是哪一部分Example result是readme.md吗?
【解决方案2】:

注释

另一个使用 package-info.java 的好理由是添加默认 annotations 以供 FindBugs 使用。例如,如果你把它放在你的 package-info 文件中:

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

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

【讨论】:

    【解决方案3】:

    不光是一些findbugs注解,公共库中的很多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)。

    【讨论】:

      【解决方案4】:

      package-info.java 文件允许添加 javadoc 来记录整个包。例如,请参阅http://docs.oracle.com/javase/7/docs/api/java/applet/package-summary.html

      如果您不在乎缺少软件包文档,请忽略警告或禁用JavadocPackage check

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-22
          • 2011-10-09
          • 2021-05-10
          • 2011-04-08
          • 1970-01-01
          • 2010-11-11
          • 2018-11-17
          相关资源
          最近更新 更多