2016-04-12 9 views
3

Die maven-dependency-plugin identifiziert, was es glaubt, ungenutzte Abhängigkeiten zu sein, wenn Sie kompilieren, indem Sie Warnungen zur Kompilierzeit erzeugen.Unterdrücken Sie die Warnungen "Nicht verwendete deklarierte Abhängigkeiten gefunden" des Maven Dependency Plugins

In einigen Fällen ist diese Nachricht falsch positiv und die Abhängigkeit wird transitiv benötigt.

Frage: Wie kann ich in meinem pom.xml identifizieren, dass dies der Fall ist?

+0

Welche IDE verwenden Sie? – mrbela

+3

@mrbela das ist IDE unabhängig. Es beinhaltet Maven, die Sie vom Terminal aus starten könnten, wenn Sie das bevorzugen. – vpiTriumph

+0

Haben Sie versucht, Maven mit '--quiet' Parameter zu laufen? Es sollte nur Fehler anzeigen, während es verwendet wird. – dambros

Antwort

4

Sie sollten das ignoredDependencies Element in Ihrem pom konfigurieren:

Liste der Abhängigkeiten, die ignoriert werden. Jede Abhängigkeit von dieser Liste wird von der Liste "deklariert, aber nicht verwendet" und "verwendet, aber nicht deklariert" ausgeschlossen. Die Filtersyntax lautet wie folgt:

[groupId]:[artifactId]:[type]:[version] 

wobei jedes Mustersegment optional ist und vollständige und teilweise * Platzhalterzeichen unterstützt. Ein leeres Mustersegment wird als impliziter Platzhalter behandelt. *

Wie auch von der offiziellen Exclude dependencies from dependency analysis angegeben. Eine Beispielkonfiguration wäre:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.10</version> 
      <executions> 
       <execution> 
        <id>analyze-dep</id> 
        <goals> 
         <goal>analyze-only</goal> 
        </goals> 
        <configuration> 
         <ignoredDependencies> 
          <ignoredDependency>org.foo:bar-api:jar:1.7.5</ignoredDependency> 
         </ignoredDependencies> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

Ich glaube, das war genau das, wonach ich gesucht habe.Ich hatte dies in der Vergangenheit an einem Projekt gemacht, konnte aber kein Beispiel ausgraben. Dies ist überraschend spärlich über SO abgedeckt. Ich werde es ausprobieren. – vpiTriumph

+0

Die Antwort ist korrekt, um die Warnungen zu unterdrücken. Ich möchte nur darauf hinweisen, dass Maven ziemlich gut ist und keine falschen positiven Ergebnisse für den/compile/scope erzeugt, also entweder: A - das ist keine transitive Abhängigkeit und der Bereich sollte/runtime/(und du wirst muss immer noch die Warnungen unterdrücken), oder B - das ist eine transitive Abhängigkeit. In diesem Fall können Sie die Warnung loswerden, indem Sie einfach den Abhängigkeitsbereich von Ihren Abhängigkeiten entfernen (und ihn möglicherweise zur dependencyManagement hinzufügen, wenn Sie eine bestimmte Version benötigen). – cleberz

0

Sie können mvn dependency:tree verwenden, um Ihre Abhängigkeiten zu bewerten.

Referenz: https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html

+0

Ich bin vertraut mit 'mvn Abhängigkeit: Baum', aber wie ich bereits erwähnt habe, sind letztlich einige Abhängigkeiten, die es als unbenutzt identifiziert, nicht zu beseitigen. Die statische Analyse ist zum Beispiel bei der Verwendung von Abhängigkeiten durch Reflektion schlecht. – vpiTriumph

-1

versuchen bereitgestellt Umfang mit

bereitgestellt Dies ist ähnlich wie die Kompilierung, sondern zeigen Sie das JDK oder ein Container erwarten, dass die Abhängigkeit zur Laufzeit zur Verfügung zu stellen. Wenn Sie beispielsweise eine Webanwendung für die Java Enterprise Edition erstellen, würden Sie die Abhängigkeit von der Servlet-API und zugehörigen Java EE-APIs für den bereitgestellten Bereich festlegen, da der Webcontainer diese Klassen bereitstellt. Dieser Bereich ist nur für den Kompilierungs- und Testklassenpfad verfügbar und nicht transitiv.

0

, dass fast das war, was ich suchte, aber ich denke, Sie festlegen, dass ein wenig mehr wie:

<execution> 
    <goals> 
    <goal>analyze-only</goal> 
    </goals> 
    <configuration> 
    <failOnWarning>true</failOnWarning> 
    <ignoredUnusedDeclaredDependencies> 
     <ignoredUnusedDeclaredDependency>org.reflections:reflections:*</ignoredUnusedDeclaredDependency> 
    </ignoredUnusedDeclaredDependencies> 
    <ignoredUsedUndeclaredDependencies> 
     <ignoredUsedUndeclaredDependency>junit:*:*</ignoredUsedUndeclaredDependency> 
    </ignoredUsedUndeclaredDependencies> 
    <ignoreNonCompile>false</ignoreNonCompile> 
    <outputXML>true</outputXML> 
    </configuration> 
</execution> 

So dies das gleiche fast tut, aber ist spezifischer auf welche Art von Abhängigkeiten

ignoriert werden sollen