Mengapa package-info.java berguna?

97

Ketika saya menjalankan CheckStyle pada proyek Java saya, ia mengatakan Missing package-info.java file.untuk beberapa kelas, tetapi tidak semuanya. Saya tidak tahu mengapa pesan ini hanya muncul kadang-kadang. Selanjutnya proyek saya berjalan dengan baik tanpa package-info.java.

Apa yang dilakukan package-info.java? Apakah saya benar-benar membutuhkannya untuk proyek Java saya?

Socrates
sumber
3
Anda dapat menggunakannya untuk mendokumentasikan atau membuat anotasi di tingkat paket. Lihat pertanyaan ini .
McDowell
Saya sudah menjadi penggemar package-info.java selama ini tetapi saya bertanya-tanya apakah README.md lebih cocok di 2018
Sridhar Sarnobat
@ Sridhar-Sarnobat Selain package-info.java dan README.md dari Git, ada kemungkinan Confluene juga menambahkan tiket Jira. Dengan cara itu juga diagram, alur kerja, atau video dapat ditambahkan.
Socrates
1
Tahukah Anda bahwa Anda juga dapat menulis kode lain di sana? Seperti kelas dll ... Aneh!
sproketboy

Jawaban:

106

Ini digunakan untuk menghasilkan javadocs untuk sebuah paket.

/**
* Domain classes used to produce .....
* <p>
* These classes contain the ......
* </p>
*
* @since 1.0
* @author somebody
* @version 1.0
*/
package com.domain;

Akan menghasilkan info com.domainpaket untuk paket:

Contoh hasil: https://docs.oracle.com/javase/7/docs/api/java/awt/package-summary.html

m-szalik.dll
sumber
maaf masih belum jelas bagian mana yang anda Example resultrujuk apakah itu readme.md?
shareef
50

Anotasi

Alasan bagus lainnya untuk menggunakan package-info.java adalah menambahkan anotasi default untuk digunakan oleh FindBugs . Misalnya, jika Anda meletakkan ini di file info paket Anda:

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

lalu ketika findbugs berjalan pada kode dalam paket itu, semua metode dan bidang diasumsikan bukan nol kecuali Anda memberi anotasi pada mereka @CheckForNull. Ini jauh lebih bagus dan lebih mudah dilakukan daripada meminta pengembang untuk menambahkan @NonNullanotasi ke setiap metode dan bidang.

mdhirsch
sumber
12

Tidak hanya beberapa anotasi findbugs, tetapi banyak anotasi java di perpustakaan umum memiliki java.lang.annotation.ElementType.PACKAGEtipe sebagai salah satu kemungkinan nilai java.lang.annotation.Targetanotasi mereka sendiri , misalnya:

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

dan banyak lagi.

package-info.javaFile ini akan menjadi file, di mana Anda dapat menempatkan penjelasan seperti itu (bersama dengan javadoc).

Rene Mazala
sumber
4

The package-info.java adalah file Java yang dapat ditambahkan ke setiap paket source Java. Ini digunakan untuk memberikan info pada tingkat "paket" sesuai namanya. Ini berisi dokumentasi dan penjelasan yang digunakan dalam paket.

Contoh javadoc sudah tersedia di jawaban, bagian di bawah ini menjelaskan cara kerjanya memetikan anotasi.

Misalnya, pada file di bawah ini digunakan untuk "menggantikan" kemunculan joda.time.DateTime dengan 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; 

Ada sejumlah anotasi yang tersedia yang dapat digunakan untuk melakukan berbagai hal di tingkat "paket". Ini dapat ditemukan di https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html

subodhkarwa.dll
sumber