Почему пакет -info.java полезен?
Когда я запускаю CheckStyle над моим Java-проектом, он говорит Missing package-info.java file.
для некоторых классов, но не для всех из них. Я не могу понять, почему это сообщение появляется только иногда. Кроме того, мой проект отлично работает без package-info.java.
Что делает package-info.java? Я действительно нуждаюсь в этом для своих проектов Java?
Ответы
Ответ 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://jaxb.java.net/nonav/2.2.1/docs/api/overview-summary.html
Ответ 2
Еще одна веская причина для использования package-info.java заключается в добавлении аннотаций по умолчанию для использования findbugs. Например, если вы поместите это в свой файл инфо-пакета:
@DefaultAnnotation(NonNull.class)
package com.my.package;
то при запуске findbugs на коде в этом пакете предполагается, что все методы и поля не равны нулю, если вы не аннотируете их с помощью @CheckForNull
. Это гораздо приятнее и надежнее, чем требовать от разработчиков добавления аннотаций @NonNull
для каждого метода и поля.
Ответ 3
Файл package-info.java позволяет добавлять javadoc для документирования целого пакета. См. http://docs.oracle.com/javase/7/docs/api/java/applet/package-summary.html, например.
Если вам не нужна документация по отсутствующему пакету, тогда игнорируйте предупреждение или отключите JavadocPackage check.
Ответ 4
Не только некоторые аннотации 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).