Como encontrar o nome do pacote para uma determinada classe de java do terminal

2

por exemplo, digamos que eu queira usar o ArrayList para usar

  

import java.util.ArrayList;

na minha fonte java. Mas no caso eu esqueci que ArrayList está incluído no pacote java.util . so como faço para encontrar um nome do pacote da classe ArrayList ?

  1. assumindo que eu não tenho internet
  2. assumindo que não quero navegar na origem
por Rohit Karadkar 26.12.2014 / 11:41

2 respostas

2

Não tenho certeza do que você usa para o desenvolvimento, mas estou usando o IntelliJ IDEA e nunca preciso me preocupar sobre qualquer declaração de importação. Acabei de começar a digitar ArrL e a IDEA cuidará do resto. Ele sugerirá ArrayList<E> para o preenchimento automático e corrigirá a declaração de importação instantaneamente. Só sabe o que você quer fazer e você pode se concentrar no desenvolvimento e não em lembrar nomes de pacotes:

Editar:

Uma maneira fácil de fazer isso na linha de comando é pesquisar o arquivo src.zip que vem com o SDK. Então, se você tentar encontrar ArrayList , então você pode fazer

7z l src.zip | grep ArrayList

e você começa

2013-03-26 21:10:27 ..... 42659 8916 java/util/concurrent/CopyOnWriteArrayList.java
2013-03-26 21:10:27 ..... 21547 5814 java/util/ArrayList.java

onde você pode ver a estrutura do pacote porque é semelhante às subpastas. Tenho certeza de que há casos em que isso não funciona, mas você pode pelo menos tentar.

    
por halirutan 26.12.2014 / 14:07
2

Assumindo que $JAVA_HOME esteja definido corretamente.

$ find $JAVA_HOME -name *.jar -print | xargs -n1 jar -tf | grep "ArrayList.class"
com/sun/istack/internal/FinalArrayList.class
com/sun/xml/internal/messaging/saaj/util/FinalArrayList.class
com/sun/xml/internal/org/jvnet/mimepull/FinalArrayList.class
sun/swing/BakedArrayList.class
sun/awt/util/IdentityArrayList.class
java/util/concurrent/CopyOnWriteArrayList.class
java/util/Arrays$ArrayList.class
java/util/ArrayList.class
com/sun/javafx/UnmodifiableArrayList.class
org/eclipse/equinox/internal/p2/core/helpers/CollectionUtils$UnmodifiableArrayList.class

Pequena função auxiliar, ainda assumindo que JAVA_HOME está definido e configurado corretamente

function jfind () 
{ 
    if [[ -z "$JAVA_HOME" ]]; then
        echo "Please set JAVA_HOME variable";
    else
        find $JAVA_HOME -name *.jar -print | xargs -n1 jar -tf | grep "$@";
    fi
}

Solução mais comum

Você pode substituir JAVA_HOME por qualquer caminho onde os jars desejáveis estejam localizados. Por exemplo, o caminho do seu projeto:

$ find some_folder_with_jars -name *.jar -print | xargs -n1 jar -tf | grep "Awesome.class"

Fontes

Com base em this responda

    
por c0rp 26.12.2014 / 15:02