[java] package-info.java가 유용한 이유는 무엇입니까?

Java 프로젝트에서 CheckStyle을 실행하면 Missing package-info.java file.일부 클래스에 대해 표시되지만 전부는 아닙니다. 이 메시지가 가끔 나타나는 이유를 알 수 없습니다. 또한 내 프로젝트는 package-info.java 없이도 완벽하게 실행됩니다.

package-info.java는 무엇을합니까? Java 프로젝트에 정말 필요합니까?



답변

패키지에 대한 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를 사용하는 또 다른 좋은 이유는 FindBugs 에서 사용할 기본 주석 을 추가 하는 것 입니다. 예를 들어, 이것을 package-info 파일에 넣으면 :

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

그런 다음 findbugs가 해당 패키지의 코드에서 실행될 때 모든 메서드와 필드는 .NET으로 주석을 달지 않는 한 null이 아닌 것으로 간주됩니다 @CheckForNull. 이것은 개발자 @NonNull가 각 방법과 필드에 주석을 추가하도록 요구하는 것보다 훨씬 더 좋고 완벽 합니다.


답변

일부 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와 함께).


답변

package-info.java 파일을 사용하면 전체 패키지를 문서화하기 위해 javadoc을 추가 할 수 있습니다. 예를 들어 http://docs.oracle.com/javase/7/docs/api/java/applet/package-summary.html 을 참조 하십시오 .

누락 된 패키지 문서에 대해 신경 쓰지 않는 경우 경고를 무시하거나 JavadocPackage 검사를 비활성화 하십시오 .


답변

package-info.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 에서 찾을 수 있습니다.


답변