2014-11-11 10 views
12

Voglio usare una libreria che ha la seguente dipendenza:Qual è l'ambito Maven corretto delle annotazioni findbugs?

<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>annotations</artifactId> 
    <version>2.0.3</version> 
</dependency> 

Ho letto che FindBugs è per l'analisi statica del codice Java, quindi anche se non è necessario includere nell'applicazione. È sicuro escludere il barattolo con <scope>provided</scope> o con un <exclusion>...</exclusion>?

Un motivo per escluderlo è che esiste una politica aziendale contro la licenza (L) GPL.

+0

Stai dicendo che la libreria che vuoi utilizzare tira i Findbug come una dipendenza transitiva? Inoltre, potresti chiarire cosa intendi con 'sicuro?' – user944849

+0

@ user944849 Sì, findbugs diventa una dipendenza transitiva nel mio progetto. Con sicurezza intendo che la libreria dovrebbe funzionare e non stampare errori sulle classi mancanti. – holmis83

risposta

2

In teoria, dovrebbe essere completamente sicuro (come definito nel commento di chiarimento dell'OP) per escludere la dipendenza transitiva di Findbugs. Se usato correttamente, Findbugs dovrebbe essere usato solo quando si costruisce la libreria, non usandola. È probabile che qualcuno abbia dimenticato di aggiungere <scope>test</scope> alla dipendenza di Findbugs.

Quindi, andare avanti e provare l'esclusione. Esegui l'applicazione. Vengono visualizzati errori del percorso di classe, funzionalità dell'applicazione correlate alla libreria che non funziona o si vedono messaggi nei log che sembrano non essere disponibili per i Findbug? Se la risposta è sì, personalmente ripenserò utilizzando questa particolare libreria nella mia applicazione e cercherò di trovare un'alternativa.

Inoltre, congratulazioni per il controllo del classpath in primo piano! Come pratica generale, è una buona idea fare ciò che hai fatto ogni volta che includi una libreria nella tua applicazione: aggiungi la libreria, quindi controlla quali altre dipendenze transitive ci sono e procedi alla pulizia del classpath necessaria all'inizio . Quando faccio questo trovo che rende le mie sessioni di debug molto più brevi.

+5

Nota a chiunque arrivi, NON è SICURO escludere la libreria omettendola dal POM. Deve esserci, ma dovrebbe avere 'scope = provided'. Ho letto questa risposta troppo velocemente, l'ho esclusa completamente dal POM e ho avuto problemi. –

15

Sì, puoi tranquillamente escludere questa libreria. Contiene solo annotazioni che non devono essere presenti in fase di runtime. Abbi cura di averli disponibili per l'analisi di FindBugs, però.

nota che si dovrebbe anche elencare jsr305.jar, in questo modo:

<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>annotations</artifactId> 
    <version>3.0.2</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>com.google.code.findbugs</groupId> 
    <artifactId>jsr305</artifactId> 
    <version>3.0.2</version> 
    <scope>provided</scope> 
</dependency> 

Entrambi i vasi sono tenuto a fare queste annotazioni funzionano.

Verificare il most recent findbugs version in Maven Central.

FindBugs è fornito sotto la LGPL, quindi non ci dovrebbero essere problemi per la vostra azienda. Inoltre, sei semplicemente utilizzando FindBugs; non stai sviluppando qualcosa derivato da FindBugs.

Problemi correlati