Você está usando algum IDE? Porque ele será exibido automaticamente se você estiver usando um.
joey rohan
Estou usando o Eclipse, mas preciso fazer isso com código.
Sticku
@LuiggiMendoza - A possível duplicata possui respostas com exemplos, bem como recursos para documentação. Procurar por um desses nomes de classe + exemplo produzirá vários resultados úteis.
Aiias
@Alias, a possível duplicata afirma como encontrar e obter um arquivo de um jar, enquanto a questão é sobre como obter os nomes das classes dentro de um jar (possivelmente as classes em todos os pacotes dentro dele). O link na resposta do ErikKaju aponta para uma possível solução usando JarInputStreame JarEntryclasses que não consigo encontrar em nenhuma resposta do seu referido link.
Luiggi Mendoza
Respostas:
68
Infelizmente, o Java não fornece uma maneira fácil de listar classes no JRE "nativo". Isso deixa você com algumas opções: (a) para qualquer arquivo JAR fornecido, você pode listar as entradas dentro desse arquivo JAR, localizar os .classarquivos e determinar qual classe Java cada .classarquivo representa; ou (b) você pode usar uma biblioteca que faça isso para você.
Opção (a): Verificar arquivos JAR manualmente
Nesta opção, preencheremos classNamescom a lista de todas as classes Java contidas em um arquivo jar em /path/to/jar/file.jar.
List<String> classNames =newArrayList<String>();ZipInputStream zip =newZipInputStream(newFileInputStream("/path/to/jar/file.jar"));for(ZipEntry entry = zip.getNextEntry(); entry !=null; entry = zip.getNextEntry()){if(!entry.isDirectory()&& entry.getName().endsWith(".class")){// This ZipEntry represents a class. Now, what class does it represent?String className = entry.getName().replace('/','.');// including ".class"
classNames.add(className.substring(0, className.length()-".class".length()));}}
Opção (b): Usando bibliotecas de reflexões especializadas
Goiaba
A goiaba tem ClassPathdesde pelo menos 14.0, que usei e gostei. Uma coisa boa ClassPathé que ele não carrega as classes que encontra, o que é importante quando você está procurando por um grande número de classes.
ClassPath cp=ClassPath.from(Thread.currentThread().getContextClassLoader());for(ClassPath.ClassInfo info : cp.getTopLevelClassesRecurusive("my.package.name")){// Do stuff with classes here...}
Reflexões
Eu não usei pessoalmente a biblioteca Reflections , mas parece bem quista. Alguns ótimos exemplos são fornecidos no site, como esta maneira rápida de carregar todas as classes em um pacote fornecido por qualquer arquivo JAR, que também pode ser útil para seu aplicativo.
Obrigado. Isso responde à parte "basta obter uma lista de classes" do OP que não foi solicitada.
octopusgrabbus
9
Você também pode usar unzip -l jarfile.jarem uma pitada. Um arquivo JAR é apenas um arquivo zip com um manifesto!
assinado
3
O problema é que ele provavelmente queria obter os arquivos de classe dentro de um jar em tempo de execução, dada uma instância do carregador de classe (provavelmente para ver quais classes são carregadas dentro desse jar específico).
Richard Duerr
19
Talvez você esteja procurando um jarcomando para obter a lista de classes no terminal,
isso era exatamente o que eu precisava, mesmo que o proprietário da pergunta precisasse de uma solução baseada em código. Obrigado!
providencemac
10
Este é um hack que estou usando:
Você pode usar javao preenchimento automático de assim:
java -cp path_to.jar <Tab>
Isso lhe dará uma lista de classes disponíveis para passar como a classe inicial. Claro, tentar usar um que não tenha o arquivo principal não fará nada, mas você pode ver o que javapensa que as classes dentro do .jarsão chamadas.
Adicione algum exemplo específico em um jarro de exemplo à sua resposta.
Juru,
4
O comando abaixo listará o conteúdo de um arquivo jar .
comando: - unzip -l jarfilename.jar.
amostra o / p: -
Archive: hello-world.jar
Length Date Time Name
--------- ---------- ----- ----
43161 10-18-2017 15:44 hello-world/com/ami/so/search/So.class
20531 10-18-2017 15:44 hello-world/com/ami/so/util/SoUtil.class
--------- -------
63692 2 files
De acordo com o manual de unzip
-l lista os arquivos compactados (formato curto). Os nomes, tamanhos de arquivo não compactados e datas e horas de modificação dos arquivos especificados são impressos, junto com os totais de todos os arquivos especificados. Se o UnZip foi compilado com OS2_EAS definido, a opção -l também lista colunas para os tamanhos de atributos estendidos (EAs) do OS / 2 armazenados e listas de controle de acesso (ACLs) do OS / 2. Além disso, o comentário do zipfile e os comentários individuais do arquivo (se houver) são exibidos. Se um arquivo foi arquivado de um sistema de arquivos de caso único (por exemplo, o antigo sistema de arquivos FAT do MS-DOS) e a opção -L foi fornecida, o nome do arquivo é convertido para minúsculas e é prefixado com um acento circunflexo (^).
Embora este trecho de código seja bem-vindo e possa fornecer alguma ajuda, seria muito melhor se incluísse uma explicação de como e por que isso resolve o problema. Lembre-se de que você está respondendo às perguntas para os leitores no futuro, não apenas para a pessoa que está perguntando agora! Por favor edite sua resposta para adicionar explicação, e dar uma indicação do que limitações e premissas se aplicam.
Toby Speight
2
Você pode tentar isto:
unzip -v /your/jar.jar
Isso será útil apenas se o seu jar for executável, ou seja, no manifesto, você definiu alguma classe como classe principal
Descrição da solução : Eclipse IDE pode ser usado para isso criando um projeto java de amostra e adicionando todos os jars no caminho de construção do projeto
PASSOS abaixo :
Crie um projeto Eclipse Java de amostra.
Todos os frascos que você tem em seu caminho de construção
CTRL + SHIFT + T e digite o nome completo da classe.
Os resultados serão exibidos na janela com todos os frascos dessa classe. Veja a foto em anexo.
JarInputStream
eJarEntry
classes que não consigo encontrar em nenhuma resposta do seu referido link.Respostas:
Infelizmente, o Java não fornece uma maneira fácil de listar classes no JRE "nativo". Isso deixa você com algumas opções: (a) para qualquer arquivo JAR fornecido, você pode listar as entradas dentro desse arquivo JAR, localizar os
.class
arquivos e determinar qual classe Java cada.class
arquivo representa; ou (b) você pode usar uma biblioteca que faça isso para você.Opção (a): Verificar arquivos JAR manualmente
Nesta opção, preencheremos
classNames
com a lista de todas as classes Java contidas em um arquivo jar em/path/to/jar/file.jar
.Opção (b): Usando bibliotecas de reflexões especializadas
Goiaba
A goiaba tem
ClassPath
desde pelo menos 14.0, que usei e gostei. Uma coisa boaClassPath
é que ele não carrega as classes que encontra, o que é importante quando você está procurando por um grande número de classes.Reflexões
Eu não usei pessoalmente a biblioteca Reflections , mas parece bem quista. Alguns ótimos exemplos são fornecidos no site, como esta maneira rápida de carregar todas as classes em um pacote fornecido por qualquer arquivo JAR, que também pode ser útil para seu aplicativo.
fonte
Você pode usar a
jar
ferramenta Java . Liste o conteúdo do arquivo jar em um arquivo txt e você poderá ver todas as classes do jar.fonte
unzip -l jarfile.jar
em uma pitada. Um arquivo JAR é apenas um arquivo zip com um manifesto!Talvez você esteja procurando um
jar
comando para obter a lista de classes no terminal,Onde,
Ou apenas grep acima do resultado para ver
.class
apenas osPara ver o número de
class
es,fonte
Este é um hack que estou usando:
Você pode usar
java
o preenchimento automático de assim:Isso lhe dará uma lista de classes disponíveis para passar como a classe inicial. Claro, tentar usar um que não tenha o arquivo principal não fará nada, mas você pode ver o que
java
pensa que as classes dentro do.jar
são chamadas.fonte
Você pode usar o
fonte
Podes tentar:
Isso será útil apenas se o seu jar for executável, ou seja, no manifesto, você definiu alguma classe como classe principal
fonte
O comando abaixo listará o conteúdo de um arquivo jar .
comando: -
unzip -l jarfilename.jar
.amostra o / p: -
Archive: hello-world.jar Length Date Time Name --------- ---------- ----- ---- 43161 10-18-2017 15:44 hello-world/com/ami/so/search/So.class 20531 10-18-2017 15:44 hello-world/com/ami/so/util/SoUtil.class --------- ------- 63692 2 files
De acordo com o manual de
unzip
fonte
Você pode tentar isto:
Isso será útil apenas se o seu jar for executável, ou seja, no manifesto, você definiu alguma classe como classe principal
fonte
Use este script bash:
isso irá listar as classes dentro de jars em seu diretório na forma:
Saída de amostra:
No Windows, você pode usar o PowerShell:
fonte
Descrição da solução : Eclipse IDE pode ser usado para isso criando um projeto java de amostra e adicionando todos os jars no caminho de construção do projeto
PASSOS abaixo :
Crie um projeto Eclipse Java de amostra.
Todos os frascos que você tem em seu caminho de construção
CTRL + SHIFT + T e digite o nome completo da classe.
Os resultados serão exibidos na janela com todos os frascos dessa classe. Veja a foto em anexo.
fonte
windows cmd: isso funcionaria se você tivesse todos os jars no mesmo diretório e execute o comando abaixo
fonte
Mac OS: No Terminal:
fonte