Quando executo CheckStyle no meu projeto Java, ele diz Missing package-info.java file.
para algumas classes, mas não todas. Não consigo descobrir por que essa mensagem aparece apenas algumas vezes. Além disso, meu projeto funciona perfeitamente sem o package-info.java.
O que o package-info.java faz? Eu realmente preciso disso para meus projetos Java?
java
maven
checkstyle
Sócrates
fonte
fonte
Respostas:
É usado para gerar javadocs para um pacote.
/** * Domain classes used to produce ..... * <p> * These classes contain the ...... * </p> * * @since 1.0 * @author somebody * @version 1.0 */ package com.domain;
Gerará informações do
com.domain
pacote para o pacote:Resultado de exemplo: https://docs.oracle.com/javase/7/docs/api/java/awt/package-summary.html
fonte
Example result
é o readme.md?Anotações
Outro bom motivo para usar o package-info.java é adicionar anotações padrão para uso por FindBugs . Por exemplo, se você colocar isso no arquivo de informações do pacote:
@DefaultAnnotation(NonNull.class) package com.my.package;
então, quando findbugs é executado no código desse pacote, todos os métodos e campos são considerados não nulos, a menos que você os anote com
@CheckForNull
. Isso é muito mais agradável e à prova de falhas do que exigir que os desenvolvedores adicionem@NonNull
anotações a cada método e campo.fonte
Não apenas algumas anotações de findbugs, mas muitas anotações java em bibliotecas comuns têm o
java.lang.annotation.ElementType.PACKAGE
tipo como um dos valores possíveis de sua própriajava.lang.annotation.Target
anotação, por exemplo: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
e muito mais.
Este
package-info.java
arquivo seria o arquivo, onde você pode colocar tais anotações (junto com o javadoc).fonte
Um arquivo package-info.java permite adicionar javadoc para documentar um pacote inteiro. Consulte http://docs.oracle.com/javase/7/docs/api/java/applet/package-summary.html por exemplo.
Se você não se preocupa com a ausência da documentação do pacote, ignore o aviso ou desative a verificação JavadocPackage .
fonte
O pacote-info.java é um arquivo Java que pode ser adicionado a qualquer pacote de origem Java. É usado para fornecer informações em um nível de "pacote" de acordo com seu nome. Ele contém documentação e anotações usadas no pacote.
O exemplo do javadoc já é fornecido na resposta, a parte abaixo explica como funciona no caso de anotações.
Por exemplo, no arquivo abaixo, ele é usado para "substituir" a ocorrência de joda.time.DateTime por 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;
Existem várias anotações disponíveis com as quais podem ser usadas para realizar coisas diferentes no nível de "pacote". Ele pode ser encontrado em https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/package-summary.html
fonte