2011-01-20 19 views
5

Ho un sacco di file JAR (da un progetto di maven2) e rapporti di Maven che alcuni pacchetti non sono stati trovati (org.openanzo.client.jena per la precisione). Voglio scavare nei file JAR scaricati come risultato della risoluzione delle dipendenze di Maven e trovare quali pacchetti sono quindi disponibili da questi file JAR. Approfondimenti?Come trovo i pacchetti definiti in un barattolo?

AGGIORNAMENTO: Apparentemente, l'unica buona soluzione per ispezionare gli interni di un file jar è l'utilità "jar" oppure è possibile utilizzare le funzionalità del proprio IDE per farlo.

+0

cosa intendi con "segnalazioni di errori che alcuni pacchetti non sono stati trovati"? Quale comando stai cercando di eseguire? Qual è il messaggio? C'è qualche altra informazione fornita. Solitamente un tale errore non appare senza contesto. –

+0

@ Zac: hai ragione. Era la mia non familiarità con il maven che mi ha fatto credere che il problema fosse un vaso mancante. A proposito, l'ho risolto. Tnx per la tua considerazione. –

risposta

11

jar tvf filename.jar mostrerà il contenuto di un file jar senza richiedere l'estrazione.

Ma penso che forse quello che stai cercando di fare è trovare le giuste coordinate per la dipendenza che ti manca, poiché ovviamente nessuno di quelli che hai in questo momento sta fornendo il pacchetto che stai cercando (in altri le parole, non è probabile che il loro contenuto sia in grado di aiutarti).

Confesso che il primo posto che suggerirei di verificare è Sonatype public Nexus instance. Tuttavia, la ricerca di your example non restituisce nulla. Di solito questo significa che il progetto non sta cercando di portare le loro cose in Maven Central o in altri importanti repository (che va bene), quindi devi ricorrere a una ricerca sul web. Di solito le prime due sezioni del pacchetto ti dicono dove cercare (openanzo.org nel tuo caso).

1

. I file .jar sono solo archivi compressi ZIP, rinominarlo in zip, aprirlo con il programma di decompressione preferito e attraversare la directory.

Se si aggiunge il file jar a un progetto eclipse, è possibile passare attraverso la lib in Project Explorer.

HTH

9

Se siete su Linux o un Mac, si potrebbe andare al terminal alla radice della cartella contenente i JAR e Tipo:

# grep -ri "org.openanzo.client.jena" * 

Si restituirà un elenco ricorsivo di tutti i file JAR che contengono il nome del pacchetto. Se restituisce 0 risultati, quindi nessuno di quei JARS contiene quel pacchetto.

Se si desidera eseguire una ricerca più esauriente, è possibile rimuovere i file JAR. La struttura della directory e i file .class saranno organizzati da pacchetti in cartelle.

# jar xvf filename.jar 

Se siete su Windows, è possibile unJAR un file JAR utilizzando uno strumento come 7Zip.

+1

se sei su Windows, puoi usare cygwin e linux grep :) – MartinC

0

Supponendo che Maven abbia scaricato i file jar, i file verranno caricati in un repository locale. È possibile utilizzare il browser Maven fornito in dotazione con Eclipse per cercare e trovare le risorse nel repository (in genere in userdir/.m2/repository)

Nota: è possibile esplorare il repository direttamente se lo si desidera. Capirai i pacchetti che sono stati scaricati. Ma suggerisco di usare il plugin.

Se si utilizza Intellij IDEA, ogni progetto contiene un albero chiamato Libreria esterna che consente di cercare ed esplorare le proprie librerie.

2

@Carsten non è necessario rinominare un file .jar in .zip.È possibile aprire direttamente il file jar in winzip/o altra utility zip (supponendo Windows OS)

@ ashy_32bit provare ad utilizzare il plugin eclissi "finder classe jar" da IBM. plug-in semplice per trovare le classi (se si conosce il nome della classe)

O

come Carsten suggerito ... impostare i file jar come file lib e cercare manualmente fino

O

creare un file batch denominato a.bat (dove avete tutti i vostri file jar direttamente sotto una singola cartella) e incollare i seguenti 4 linee

@ECHO OFF 
dir /b *.jar > allJarFilesList.txt 
FOR /F %%A IN (allJarFilesList.txt) DO jar -tf %%A > list_of_packages.txt 
FOR %%B IN (list_of_packages.txt) DO FIND /I "com/sun" %%B 

NOTA il "co m/sun "nell'ultima riga .. è hard coded, puoi passare anche come argomento ...

So che questa è una forma molto semplice e può essere migliorata" molto "come cercare in vari sottotitoli le directory.

spero che questo aiuti :-)

Problemi correlati