maven2.0.4からmaven2.0.5にバージョンアップする時の注意点
transitive dependency(推移的な依存関係)の解決に修正が加えられている。maven2.0.5ではpomへの記述順で依存性が解決されるようになった。(maven2.0.4ではpomへの記述順ではなかった理由は本来LinkedHashSetを使用すべき箇所でHashSetを使っていたため。)
具体的な変更箇所は
svn diff https://svn.apache.org/repos/asf/maven/components/trunk@430572 https://svn.apache.org/repos/asf/maven/components/trunk@430573
で取得可能で、r430573のコメントが「Merging fix for loss of dependency ordering from branch.」だそうで。
Index: maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java =================================================================== --- maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (revision 430572) +++ maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (revision 430573) @@ -566,6 +566,7 @@ } embedder = new Embedder(); + if ( logger != null ) { embedder.setLoggerManager( new MavenEmbedderLoggerManager( new PlexusLoggerAdapter( logger ) ) ); Index: maven-core/src/main/java/org/apache/maven/DefaultMaven.java =================================================================== --- maven-core/src/main/java/org/apache/maven/DefaultMaven.java (revision 430572) +++ maven-core/src/main/java/org/apache/maven/DefaultMaven.java (revision 430573) @@ -58,6 +58,7 @@ import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.logging.AbstractLogger; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.logging.LoggerManager; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; @@ -141,15 +142,25 @@ request.setLocalRepository( mavenTools.createLocalRepository( request.getLocalRepositoryPath() ) ); } - Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE ); + // FIXME: This will not touch the core maven logger, since it's already been initialized for + // this component. + loggerManager.setThreshold( request.getLoggingLevel() ); + + Logger myLogger = getLogger(); + + // TODO: When the above problem is fixed, remove this. + if ( myLogger instanceof AbstractLogger ) + { + ((AbstractLogger) myLogger).setThreshold( request.getLoggingLevel() ); + } + Logger mojoLogger = loggerManager.getLoggerForComponent( Mojo.ROLE ); + if ( request.isDefaultEventMonitorActive() ) { - request.addEventMonitor( new DefaultEventMonitor( logger ) ); + request.addEventMonitor( new DefaultEventMonitor( mojoLogger ) ); } - loggerManager.setThreshold( request.getLoggingLevel() ); - request.setStartTime( new Date() ); wagonManager.setInteractive( request.isInteractive() ); Index: maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java =================================================================== --- maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java (revision 430572) +++ maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java (revision 430573) @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -243,7 +244,7 @@ private void assembleDependencyInheritance( Model child, Model parent ) { - Map depsMap = new HashMap(); + Map depsMap = new LinkedHashMap(); List deps = parent.getDependencies(); Index: maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java =================================================================== --- maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (revision 430572) +++ maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (revision 430573) @@ -50,6 +50,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -302,7 +303,7 @@ ArtifactFilter dependencyFilter, MavenProject project ) throws InvalidDependencyVersionException { - Set projectArtifacts = new HashSet( dependencies.size() ); + Set projectArtifacts = new LinkedHashSet( dependencies.size() ); for ( Iterator i = dependencies.iterator(); i.hasNext(); ) {
なぜ注意が必要かというと、依存性解決の優先順位が同じでバージョンが異なるjarファイルは、先に依存性解決したほうが優先されるので、場合によっては依存するjarのバージョンが変わってしまうものが出るからです。というか実際に出ました…。結構気づきにくい落とし穴だと思う…。