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


97

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

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


3
패키지 수준에서 문서화하거나 주석을 추가하는 데 사용할 수 있습니다. 이 질문을 참조하십시오 .
McDowell

나는 지금까지 package-info.java의 팬 이었지만 README.md가 2018 년에 더 적합한 지 궁금합니다
Sridhar Sarnobat

@ Sridhar-Sarnobat Git의 package-info.java 및 README.md 외에도 Confluene이 Jira 티켓을 추가 할 가능성도 있습니다. 이렇게하면 다이어그램, 워크 플로 또는 비디오도 추가 할 수 있습니다.
소크라테스

1
거기에 다른 코드도 작성할 수 있다는 것을 알고 계셨습니까? 수업 등 ... 이상 해요!
sproketboy 2018 년

답변:


106

패키지에 대한 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 resultreadme.md입니까?
shareef

50

주석

package-info.java를 사용하는 또 다른 좋은 이유는 FindBugs 에서 사용할 기본 주석 을 추가 하는 것 입니다. 예를 들어, 이것을 package-info 파일에 넣으면 :

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

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


12

일부 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 예제는 이미 답변에 제공되어 있으며 아래 부분에서는 주석의 경우 작동 방식을 설명합니다.

예를 들어, 아래 파일에서는 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 에서 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.