Package-info.java neden faydalıdır?


97

CheckStyle'ı Java projem üzerinde çalıştırdığımda Missing package-info.java file., bazı sınıflar için diyor , ancak hepsi için değil. Bu mesajın neden sadece bazen göründüğünü gerçekten anlayamıyorum. Dahası, projem package-info.java olmadan mükemmel şekilde çalışıyor.

Package-info.java ne yapar? Java projelerim için buna gerçekten ihtiyacım var mı?


3
Bunları paket düzeyinde belgelemek veya açıklama eklemek için kullanabilirsiniz. Bu soruya bakın .
McDowell

Bunca zamandır package-info.java hayranıyım ama 2018'de bir README.md'nin daha uygun olup olmadığını merak ediyorum
Sridhar Sarnobat

@ Sridhar-Sarnobat Git'ten package-info.java ve README.md'nin yanı sıra, Confluene'in Jira biletlerini de ekleme olasılığı var. Bu şekilde ayrıca diyagramlar, iş akışları veya videolar eklenebilir.
Socrates

1
Oraya başka kodlar da yazabileceğinizi biliyor muydunuz? Sınıflar gibi ... Tuhaf!
sproketboy

Yanıtlar:



50

Ek açıklamalar

Package-info.java'yı kullanmanın bir başka iyi nedeni, FindBugs tarafından kullanılmak üzere varsayılan ek açıklamalar eklemektir . Örneğin, bunu paket bilgisi dosyanıza koyarsanız:

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

daha sonra findbugs bu paketteki kod üzerinde çalıştığında, siz onlara açıklama eklemediğiniz sürece tüm yöntemlerin ve alanların boş olmadığı varsayılır @CheckForNull. Bu, geliştiricilerin @NonNullher yönteme ve alana ek açıklamalar eklemesini gerektirmekten çok daha hoş ve daha kusursuzdur .


12

Yalnızca bazı bulma hataları ek açıklamaları değil, aynı zamanda ortak kitaplıklardaki birçok java ek açıklaması, java.lang.annotation.ElementType.PACKAGEkendi java.lang.annotation.Targetek açıklamalarının olası değerlerinden biri olarak türe sahiptir , örneğin:

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

ve daha fazlası.

Bu package-info.javadosya, bu tür ek açıklamaları (javadoc ile birlikte) yerleştirebileceğiniz dosya olacaktır.



4

Package-info.java herhangi Java kaynak paketine eklenebilir bir Java dosyasıdır. Adına göre "paket" seviyesinde bilgi sağlamak için kullanılır. Pakette kullanılan belgeleri ve ek açıklamaları içerir.

Cevapta javadoc örneği zaten verilmiş olup, aşağıdaki kısım ek açıklamalar durumunda nasıl çalıştığını açıklamaktadır.

Örneğin, aşağıdaki dosyada joda.time.DateTime oluşumunu org.jadira.usertype.dateandtime.joda.PersistentDateTime ile "ikame etmek" için kullanılır.

@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; 

"Paket" düzeyinde farklı şeyler gerçekleştirmek için kullanılabilen birkaç ek açıklama vardır. Https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html adresinde bulunabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.