これも同じく、使ったことのないプラグイン(ゴール)です。
dependency:analyze
http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html
pom.xmlに依存関係が定義してある割には、実際のコードで使っていないと思われる依存関係を解析してくれます。
こんなpom.xmlがあって…
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>myapp.hello</groupId> <artifactId>myapp-hello</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>myapp-hello</name> <repositories> <repository> <id>maven.seasar.org</id> <name>The Seasar Foundation Maven2 Repository</name> <url>http://maven.seasar.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>maven.seasar.org</id> <name>The Seasar Foundation Maven2 Repository</name> <url>http://maven.seasar.org/maven2</url> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.46</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>HelloWorld</mainClass> </configuration> </plugin> </plugins> </build> </project>
Javaソースがこんな感じだった場合…
src/main/java/HelloWorld.java
import org.seasar.framework.util.StringUtil; public class HelloWorld { public static void main(String[] args) { System.out.println(StringUtil.isEmpty("")); } }
analyzeを行うと、以下のような結果になります。
$ mvn dependency:analyze [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myapp-hello 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-dependency-plugin:2.1:analyze (default-cli) @ myapp-hello >>> [INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ myapp-hello --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /xxxxx/maven-dependency/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ myapp-hello --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ myapp-hello --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /xxxxx/maven-dependency/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ myapp-hello --- [INFO] No sources to compile [INFO] [INFO] <<< maven-dependency-plugin:2.1:analyze (default-cli) @ myapp-hello <<< [INFO] [INFO] --- maven-dependency-plugin:2.1:analyze (default-cli) @ myapp-hello --- [WARNING] Unused declared dependencies found: [WARNING] org.apache.commons:commons-lang3:jar:3.1:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.718s [INFO] Finished at: Thu Dec 06 23:55:24 JST 2012 [INFO] Final Memory: 11M/171M [INFO] ------------------------------------------------------------------------
ちょっとわかりにくいですが、よーく見ると
[WARNING] Unused declared dependencies found: [WARNING] org.apache.commons:commons-lang3:jar:3.1:compile
commons-lang3を使ってないよ!と警告されています。
当然のことながら、Class#forNameとかで動的に依存している場合にはMavenに使っているいることに気付いてもらえません…。