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?


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:



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.


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).



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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.