Подтвердить что ты не робот

Почему пакет -info.java полезен?

Когда я запускаю CheckStyle над моим Java-проектом, он говорит Missing package-info.java file. для некоторых классов, но не для всех из них. Я не могу понять, почему это сообщение появляется только иногда. Кроме того, мой проект отлично работает без package-info.java.

Что делает package-info.java? Я действительно нуждаюсь в этом для своих проектов Java?

4b9b3361

Ответ 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).