You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2016/06/10 13:56:17 UTC
[2/2] maven-aether git commit: Bugfix: DefaultDependencyCollector
does not correctly handle dependency management. Blocks MNG-5227. Bugfix:
ScopeDependencySelector incorrectly excludes direct dependencies. See
MPLUGIN-296 for an example. Bugfix: Exceptio
Bugfix: DefaultDependencyCollector does not correctly handle dependency management. Blocks MNG-5227.
Bugfix: ScopeDependencySelector incorrectly excludes direct dependencies. See MPLUGIN-296 for an example.
Bugfix: Exceptions are suppressed incorrectly when closing resources.
Enhancement: Calculation of debug statistics in nanoseconds based on System.nanoTime. Blocks MNG-5729.
Feature: Addition of TransitiveDependencyManager. Blocks MNG-5761.
Maintenance: Dependency updates.
Comitting this now so that things are part of whatever refactorings are going to be performed.
Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/1ee92862
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/1ee92862
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/1ee92862
Branch: refs/heads/master
Commit: 1ee92862c67ec98564c4d8be1207355960f1dd5d
Parents: 11a061b
Author: Christian Schulte <sc...@apache.org>
Authored: Thu Jan 28 17:25:19 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Fri Jun 10 15:54:18 2016 +0200
----------------------------------------------------------------------
aether-api/pom.xml | 4 +-
aether-connector-basic/pom.xml | 4 +-
.../connector/basic/ChecksumCalculator.java | 9 +-
.../aether/connector/basic/PartialFile.java | 42 +--
aether-impl/pom.xml | 4 +-
.../impl/DefaultDependencyCollector.java | 14 +-
.../internal/impl/DefaultFileProcessor.java | 73 +++--
.../aether/internal/impl/SimpleDigest.java | 2 +-
.../internal/impl/TrackingFileManager.java | 33 +-
.../impl/DefaultDependencyCollectorTest.java | 232 ++++++++++++++
.../artifact-descriptions/managed/gid_0_ver.ini | 4 +
.../artifact-descriptions/managed/gid_1_ver.ini | 4 +
.../managed/gid_2_managed-by-0.ini | 4 +
.../managed/gid_3_managed-by-1.ini | 4 +
.../managed/gid_4_managed-by-2.ini | 2 +
.../managed/gid_5_managed-by-3.ini | 1 +
.../managed/management-tree.txt | 6 +
.../selection/managed/all-nodes.txt | 4 +
.../selection/managed/direct-of-root.txt | 1 +
.../managed/gid_direct-of-root_ver.ini | 2 +
.../selection/managed/gid_root_ver.ini | 2 +
.../managed/gid_transitive-of-root_ver.ini | 2 +
...gid_transitive-of-transitive-of-root_ver.ini | 1 +
.../selection/managed/transitive-of-root.txt | 2 +
.../transitive-of-transitive-of-root.txt | 3 +
.../optional/gid_direct-of-root_ver.ini | 2 +
.../selection/optional/gid_root_ver.ini | 2 +
.../optional/gid_transitive-of-root_ver.ini | 1 +
.../selection/optional/no-selector-tree.txt | 3 +
.../optional/optional-exclusion-tree.txt | 2 +
.../selection/scope/all-nodes.txt | 4 +
.../selection/scope/gid_direct-of-root_ver.ini | 2 +
.../selection/scope/gid_root_ver.ini | 2 +
.../scope/gid_transitive-of-root_ver.ini | 2 +
...gid_transitive-of-transitive-of-root_ver.ini | 1 +
.../transitive-of-root-scope-exclusion-tree.txt | 2 +
...ive-of-transitive-of-root-exclusion-tree.txt | 3 +
aether-spi/pom.xml | 4 +-
.../transport/AbstractTransporter.java | 107 ++++---
aether-test-util/pom.xml | 4 +-
.../test/util/DependencyGraphParser.java | 16 +-
.../test/util/IniArtifactDataReader.java | 25 +-
.../internal/test/util/TestFileProcessor.java | 14 +-
.../internal/test/util/TestFileUtils.java | 20 +-
aether-transport-classpath/pom.xml | 4 +-
aether-transport-file/pom.xml | 4 +-
aether-transport-http/pom.xml | 12 +-
aether-transport-wagon/pom.xml | 8 +-
.../transport/wagon/WagonTransporter.java | 66 ++--
aether-util/pom.xml | 4 +-
.../org/eclipse/aether/util/ChecksumUtils.java | 59 ++--
.../manager/TransitiveDependencyManager.java | 321 +++++++++++++++++++
.../graph/selector/ScopeDependencySelector.java | 34 +-
.../graph/transformer/ConflictIdSorter.java | 6 +-
.../util/graph/transformer/ConflictMarker.java | 6 +-
.../graph/transformer/ConflictResolver.java | 4 +-
pom.xml | 14 +-
57 files changed, 963 insertions(+), 254 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-api/pom.xml
----------------------------------------------------------------------
diff --git a/aether-api/pom.xml b/aether-api/pom.xml
index c894a08..ff9860c 100644
--- a/aether-api/pom.xml
+++ b/aether-api/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-api</artifactId>
@@ -44,7 +44,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-connector-basic/pom.xml
----------------------------------------------------------------------
diff --git a/aether-connector-basic/pom.xml b/aether-connector-basic/pom.xml
index 2d2a250..578c0d6 100644
--- a/aether-connector-basic/pom.xml
+++ b/aether-connector-basic/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-connector-basic</artifactId>
@@ -68,7 +68,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
----------------------------------------------------------------------
diff --git a/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java b/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
index e76f8a9..89ba6f0 100644
--- a/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
+++ b/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumCalculator.java
@@ -167,16 +167,21 @@ final class ChecksumCalculator
buffer.limit( read );
update( buffer );
}
+ fis.close();
+ fis = null;
}
finally
{
try
{
- fis.close();
+ if ( fis != null )
+ {
+ fis.close();
+ }
}
catch ( IOException e )
{
- // irrelevant
+ // Suppressed
}
}
}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
----------------------------------------------------------------------
diff --git a/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java b/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
index ad428d4..217ab5e 100644
--- a/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
+++ b/aether-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
@@ -129,44 +129,48 @@ final class PartialFile
private static FileLock tryLock( File lockFile )
throws IOException
{
- RandomAccessFile raf = new RandomAccessFile( lockFile, "rw" );
+ RandomAccessFile raf = null;
+ FileLock lock = null;
try
{
- FileLock lock = raf.getChannel().tryLock( 0, 1, false );
+ raf = new RandomAccessFile( lockFile, "rw" );
+ lock = raf.getChannel().tryLock( 0, 1, false );
if ( lock == null )
{
- close( raf );
+ raf.close();
+ raf = null;
}
return lock;
}
catch ( OverlappingFileLockException e )
{
- close( raf );
return null;
}
catch ( RuntimeException e )
{
- close( raf );
lockFile.delete();
+ lock = null;
throw e;
}
catch ( IOException e )
{
- close( raf );
lockFile.delete();
+ lock = null;
throw e;
}
- }
-
- private static void close( Closeable file )
- {
- try
- {
- file.close();
- }
- catch ( IOException e )
+ finally
{
- // irrelevant
+ try
+ {
+ if ( lock == null && raf != null )
+ {
+ raf.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
}
}
@@ -175,9 +179,9 @@ final class PartialFile
return concurrent;
}
- public void close()
+ public void close() throws IOException
{
- close( lock.channel() );
+ lock.channel().close();
lockFile.delete();
}
@@ -277,7 +281,7 @@ final class PartialFile
return lockFile != null && partFile.length() >= threshold;
}
- public void close()
+ public void close() throws IOException
{
if ( partFile.exists() && !isResume() )
{
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/pom.xml
----------------------------------------------------------------------
diff --git a/aether-impl/pom.xml b/aether-impl/pom.xml
index 71821fa..eb7c83a 100644
--- a/aether-impl/pom.xml
+++ b/aether-impl/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-impl</artifactId>
@@ -81,7 +81,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
index f1fcbf2..62a8ff2 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
@@ -169,7 +169,7 @@ public class DefaultDependencyCollector
List<Dependency> managedDependencies = request.getManagedDependencies();
Map<String, Object> stats = logger.isDebugEnabled() ? new LinkedHashMap<String, Object>() : null;
- long time1 = System.currentTimeMillis();
+ long time1 = System.nanoTime();
DefaultDependencyNode node;
if ( root != null )
@@ -269,7 +269,7 @@ public class DefaultDependencyCollector
errorPath = results.errorPath;
}
- long time2 = System.currentTimeMillis();
+ long time2 = System.nanoTime();
DependencyGraphTransformer transformer = session.getDependencyGraphTransformer();
if ( transformer != null )
@@ -289,7 +289,7 @@ public class DefaultDependencyCollector
if ( stats != null )
{
- long time3 = System.currentTimeMillis();
+ long time3 = System.nanoTime();
stats.put( "DefaultDependencyCollector.collectTime", time2 - time1 );
stats.put( "DefaultDependencyCollector.transformTime", time3 - time2 );
logger.debug( "Dependency collection stats: " + stats );
@@ -378,16 +378,16 @@ public class DefaultDependencyCollector
DependencyTraverser depTraverser, VersionFilter verFilter, Dependency dependency,
List<Artifact> relocations, boolean disableVersionManagement )
{
+ PremanagedDependency preManaged =
+ PremanagedDependency.create( depManager, dependency, disableVersionManagement, args.premanagedState );
+
+ dependency = preManaged.managedDependency;
if ( depSelector != null && !depSelector.selectDependency( dependency ) )
{
return;
}
- PremanagedDependency preManaged =
- PremanagedDependency.create( depManager, dependency, disableVersionManagement, args.premanagedState );
- dependency = preManaged.managedDependency;
-
boolean noDescriptor = isLackingDescriptor( dependency.getArtifact() );
boolean traverse = !noDescriptor && ( depTraverser == null || depTraverser.traverseDependency( dependency ) );
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java
index cfeac98..ea0665e 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultFileProcessor.java
@@ -19,7 +19,6 @@ package org.eclipse.aether.internal.impl;
* under the License.
*/
-import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -40,21 +39,6 @@ public class DefaultFileProcessor
implements FileProcessor
{
- private static void close( Closeable closeable )
- {
- if ( closeable != null )
- {
- try
- {
- closeable.close();
- }
- catch ( IOException e )
- {
- // too bad but who cares
- }
- }
- }
-
/**
* Thread-safe variant of {@link File#mkdirs()}. Creates the directory named by the given abstract pathname,
* including any necessary but nonexistent parent directories. Note that if this operation fails it may have
@@ -111,10 +95,21 @@ public class DefaultFileProcessor
// allow output to report any flush/close errors
fos.close();
+ fos = null;
}
finally
{
- close( fos );
+ try
+ {
+ if ( fos != null )
+ {
+ fos.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
}
}
@@ -132,10 +127,21 @@ public class DefaultFileProcessor
// allow output to report any flush/close errors
fos.close();
+ fos = null;
}
finally
{
- close( fos );
+ try
+ {
+ if ( fos != null )
+ {
+ fos.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
}
}
@@ -164,11 +170,38 @@ public class DefaultFileProcessor
// allow output to report any flush/close errors
fos.close();
+ fos = null;
+
+ fis.close();
+ fis = null;
}
finally
{
- close( fis );
- close( fos );
+ try
+ {
+ if ( fos != null )
+ {
+ fos.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
+ finally
+ {
+ try
+ {
+ if ( fis != null )
+ {
+ fis.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
+ }
}
return total;
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
index 9b51e98..1dcefa4 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java
@@ -67,7 +67,7 @@ class SimpleDigest
}
catch ( UnsupportedEncodingException e )
{
- // broken JVM
+ throw new AssertionError( e );
}
}
else
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
index 7b33f6e..9b17e3a 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
@@ -19,13 +19,12 @@ package org.eclipse.aether.internal.impl;
* under the License.
*/
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;
@@ -69,6 +68,12 @@ class TrackingFileManager
Properties props = new Properties();
props.load( stream );
+ lock.release();
+ lock = null;
+
+ stream.close();
+ stream = null;
+
return props;
}
catch ( IOException e )
@@ -107,13 +112,7 @@ class TrackingFileManager
if ( file.canRead() )
{
- byte[] buffer = new byte[(int) raf.length()];
-
- raf.readFully( buffer );
-
- ByteArrayInputStream stream = new ByteArrayInputStream( buffer );
-
- props.load( stream );
+ props.load( Channels.newInputStream( raf.getChannel() ) );
}
for ( Map.Entry<String, String> update : updates.entrySet() )
@@ -128,15 +127,17 @@ class TrackingFileManager
}
}
- ByteArrayOutputStream stream = new ByteArrayOutputStream( 1024 * 2 );
-
logger.debug( "Writing tracking file " + file );
- props.store( stream, "NOTE: This is an Aether internal implementation file"
- + ", its format can be changed without prior notice." );
+ raf.setLength( 0 );
+ props.store( Channels.newOutputStream( raf.getChannel() ),
+ "NOTE: This is an Aether internal implementation file"
+ + ", its format can be changed without prior notice." );
+
+ lock.release();
+ lock = null;
- raf.seek( 0 );
- raf.write( stream.toByteArray() );
- raf.setLength( raf.getFilePointer() );
+ raf.close();
+ raf = null;
}
catch ( IOException e )
{
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
index b78838a..fd1302d 100644
--- a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
+++ b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultDependencyCollectorTest.java
@@ -43,6 +43,7 @@ import org.eclipse.aether.collection.DependencyCollectionContext;
import org.eclipse.aether.collection.DependencyCollectionException;
import org.eclipse.aether.collection.DependencyManagement;
import org.eclipse.aether.collection.DependencyManager;
+import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyCycle;
import org.eclipse.aether.graph.DependencyNode;
@@ -58,6 +59,9 @@ import org.eclipse.aether.resolution.ArtifactDescriptorResult;
import org.eclipse.aether.util.artifact.ArtifactIdUtils;
import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
+import org.eclipse.aether.util.graph.manager.TransitiveDependencyManager;
+import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
+import org.eclipse.aether.util.graph.selector.ScopeDependencySelector;
import org.eclipse.aether.util.graph.version.HighestVersionFilter;
import org.junit.Before;
import org.junit.Test;
@@ -482,6 +486,157 @@ public class DefaultDependencyCollectorTest
}
@Test
+ public void testDependencyManagement_TransitiveDependencyManager()
+ throws DependencyCollectionException, IOException
+ {
+ collector.setArtifactDescriptorReader( newReader( "managed/" ) );
+ parser = new DependencyGraphParser( "artifact-descriptions/managed/" );
+ session.setDependencyManager( new TransitiveDependencyManager() );
+ final Dependency root = newDep( "gid:0:ext:ver" );
+ CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+ CollectResult result = collector.collectDependencies( session, request );
+
+ DependencyNode expected = parser.parseResource( "management-tree.txt" );
+ assertEqualSubtree( expected, result.getRoot() );
+ }
+
+ @Test
+ public void testDependencyManagement_DependencySelectorProcessesManagedState()
+ throws DependencyCollectionException, IOException
+ {
+ collector.setArtifactDescriptorReader( newReader( "selection/managed/" ) );
+ parser = new DependencyGraphParser( "artifact-descriptions/selection/managed/" );
+
+ final Dependency root = newDep( "gid:root:ext:ver", "root-scope" );
+ CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+ CollectResult result = collector.collectDependencies( session, request );
+
+ DependencyNode expected = parser.parseResource( "all-nodes.txt" );
+ assertEqualSubtree( expected, result.getRoot() );
+
+ this.session.setDependencySelector( new DependencySelector()
+ {
+
+ public boolean selectDependency( final Dependency dependency )
+ {
+ return dependency != null
+ && !( "managed".equals( dependency.getScope() )
+ || "managed".equals( dependency.getArtifact().getVersion() )
+ || dependency.isOptional() );
+
+ }
+
+ public DependencySelector deriveChildSelector( final DependencyCollectionContext context )
+ {
+ return this;
+ }
+
+ } );
+
+ // Tests managed scope is processed by selector.
+ TestDependencyManager depMgmt = new TestDependencyManager();
+ depMgmt.scope( "gid:transitive-of-transitive-of-root:ext", "managed" );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "transitive-of-transitive-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ depMgmt = new TestDependencyManager();
+ depMgmt.scope( "gid:transitive-of-root:ext", "managed" );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "transitive-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ depMgmt = new TestDependencyManager();
+ depMgmt.scope( "gid:direct-of-root:ext", "managed" );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "direct-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ // Tests managed optionality is processed by selector.
+ depMgmt = new TestDependencyManager();
+ depMgmt.optional( "gid:transitive-of-transitive-of-root:ext", Boolean.TRUE );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "transitive-of-transitive-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ depMgmt = new TestDependencyManager();
+ depMgmt.optional( "gid:transitive-of-root:ext", Boolean.TRUE );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "transitive-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ depMgmt = new TestDependencyManager();
+ depMgmt.optional( "gid:direct-of-root:ext", Boolean.TRUE );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "direct-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ // Tests managed version is processed by selector.
+ depMgmt = new TestDependencyManager();
+ depMgmt.version( "gid:transitive-of-transitive-of-root:ext", "managed" );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "transitive-of-transitive-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ depMgmt = new TestDependencyManager();
+ depMgmt.version( "gid:transitive-of-root:ext", "managed" );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "transitive-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ depMgmt = new TestDependencyManager();
+ depMgmt.version( "gid:direct-of-root:ext", "managed" );
+ session.setDependencyManager( depMgmt );
+
+ expected = parser.parseResource( "direct-of-root.txt" );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+ }
+
+ @Test
public void testVersionFilter()
throws Exception
{
@@ -491,6 +646,83 @@ public class DefaultDependencyCollectorTest
assertEquals( 1, result.getRoot().getChildren().size() );
}
+ @Test
+ public void testSelectionWithScopeDependencySelector()
+ throws DependencyCollectionException, IOException
+ {
+ collector.setArtifactDescriptorReader( newReader( "selection/scope/" ) );
+ parser = new DependencyGraphParser( "artifact-descriptions/selection/scope/" );
+
+ final Dependency root = newDep( "gid:root:ext:ver", "root-scope" );
+ CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+ CollectResult result = collector.collectDependencies( session, request );
+
+ DependencyNode expected = parser.parseResource( "all-nodes.txt" );
+ assertEqualSubtree( expected, result.getRoot() );
+
+ /*
+ A dependency selector that filters transitive dependencies based on their scope. Direct dependencies are always
+ included regardless of their scope.
+ */
+ // Include all.
+ this.session.setDependencySelector( new ScopeDependencySelector() );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ // Exclude scope of direct dependency of root equals "include all" as direct dependencies are always included.
+ this.session.setDependencySelector( new ScopeDependencySelector( "direct-of-root-scope" ) );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ // Exclude scope of transitive dependency of direct dependency of root.
+ expected = parser.parseResource( "transitive-of-root-scope-exclusion-tree.txt" );
+ this.session.setDependencySelector( new ScopeDependencySelector( "transitive-of-root-scope" ) );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+
+ // Exclude scope of transitive dependency of transitive dependency of direct dependency of root.
+ expected = parser.parseResource( "transitive-of-transitive-of-root-exclusion-tree.txt" );
+ this.session.setDependencySelector( new ScopeDependencySelector( "transitive-of-transitive-of-root-scope" ) );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+ }
+
+ @Test
+ public void testSelectionWithOptionalDependencySelector()
+ throws DependencyCollectionException, IOException
+ {
+ collector.setArtifactDescriptorReader( newReader( "selection/optional/" ) );
+ parser = new DependencyGraphParser( "artifact-descriptions/selection/optional/" );
+
+ final Dependency root = newDep( "gid:root:ext:ver", "root-scope" );
+ CollectRequest request = new CollectRequest( root, Arrays.asList( repository ) );
+ CollectResult result = collector.collectDependencies( session, request );
+
+ DependencyNode expected = parser.parseResource( "no-selector-tree.txt" );
+ assertEqualSubtree( expected, result.getRoot() );
+
+ // Exclude optional transitive dependencies.
+ expected = parser.parseResource( "optional-exclusion-tree.txt" );
+ this.session.setDependencySelector( new OptionalDependencySelector() );
+
+ request = new CollectRequest( root, Arrays.asList( repository ) );
+ result = collector.collectDependencies( session, request );
+
+ assertEqualSubtree( expected, result.getRoot() );
+ }
+
static class TestDependencyManager
implements DependencyManager
{
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/gid_0_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/gid_0_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_0_ver.ini
new file mode 100644
index 0000000..1831746
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_0_ver.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:1:ext:ver
+[manageddependencies]
+gid:2:ext:managed-by-0
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini
new file mode 100644
index 0000000..805fd98
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_1_ver.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:2:ext:ver
+[manageddependencies]
+gid:3:ext:managed-by-1
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini
new file mode 100644
index 0000000..e6cc9a6
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_2_managed-by-0.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:3:ext:ver
+[manageddependencies]
+gid:4:ext:managed-by-2
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/gid_3_managed-by-1.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/gid_3_managed-by-1.ini b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_3_managed-by-1.ini
new file mode 100644
index 0000000..aa1cea4
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_3_managed-by-1.ini
@@ -0,0 +1,4 @@
+[dependencies]
+gid:4:ext:ver
+[manageddependencies]
+gid:5:ext:managed-by-3
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini
new file mode 100644
index 0000000..990c928
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_4_managed-by-2.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:5:ext:ver
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini
new file mode 100644
index 0000000..05ba453
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/gid_5_managed-by-3.ini
@@ -0,0 +1 @@
+[dependencies]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt b/aether-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
new file mode 100644
index 0000000..7307a19
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/managed/management-tree.txt
@@ -0,0 +1,6 @@
+gid:0:ext:ver
++- gid:1:ext:ver compile
+ +- gid:2:ext:managed-by-0 compile
+ +- gid:3:ext:managed-by-1 compile
+ +- gid:4:ext:managed-by-2 compile
+ +- gid:5:ext:managed-by-3 compile
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/all-nodes.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/all-nodes.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/all-nodes.txt
new file mode 100644
index 0000000..6caeee1
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/all-nodes.txt
@@ -0,0 +1,4 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope
+ +- gid:transitive-of-root:ext:ver transitive-of-root-scope
+ +- gid:transitive-of-transitive-of-root:ext:ver transitive-of-transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/direct-of-root.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/direct-of-root.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/direct-of-root.txt
new file mode 100644
index 0000000..e7b354d
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/direct-of-root.txt
@@ -0,0 +1 @@
+gid:root:ext:ver root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_direct-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_direct-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_direct-of-root_ver.ini
new file mode 100644
index 0000000..a801f3f
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_direct-of-root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-of-root:ext:ver:transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_root_ver.ini
new file mode 100644
index 0000000..37fe9ac
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:direct-of-root:ext:ver:direct-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-root_ver.ini
new file mode 100644
index 0000000..e34fa04
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-of-transitive-of-root:ext:ver:transitive-of-transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-transitive-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-transitive-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-transitive-of-root_ver.ini
new file mode 100644
index 0000000..61a252c
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/gid_transitive-of-transitive-of-root_ver.ini
@@ -0,0 +1 @@
+[dependencies]
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-root.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-root.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-root.txt
new file mode 100644
index 0000000..dbee99b
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-root.txt
@@ -0,0 +1,2 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-transitive-of-root.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-transitive-of-root.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-transitive-of-root.txt
new file mode 100644
index 0000000..ef3dc74
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/managed/transitive-of-transitive-of-root.txt
@@ -0,0 +1,3 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope
+ +- gid:transitive-of-root:ext:ver transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct-of-root_ver.ini
new file mode 100644
index 0000000..68e3240
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_direct-of-root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-of-root:ext:ver:transitive-of-root-scope:optional
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini
new file mode 100644
index 0000000..fbdaab9
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:direct-of-root:ext:ver:direct-of-root-scope:optional
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-root_ver.ini
new file mode 100644
index 0000000..61a252c
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/gid_transitive-of-root_ver.ini
@@ -0,0 +1 @@
+[dependencies]
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/optional/no-selector-tree.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/optional/no-selector-tree.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/no-selector-tree.txt
new file mode 100644
index 0000000..890216c
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/no-selector-tree.txt
@@ -0,0 +1,3 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope optional
+ +- gid:transitive-of-root:ext:ver transitive-of-root-scope optional
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/optional/optional-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/optional/optional-exclusion-tree.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/optional-exclusion-tree.txt
new file mode 100644
index 0000000..fe87f12
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/optional/optional-exclusion-tree.txt
@@ -0,0 +1,2 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope optional
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
new file mode 100644
index 0000000..6caeee1
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/all-nodes.txt
@@ -0,0 +1,4 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope
+ +- gid:transitive-of-root:ext:ver transitive-of-root-scope
+ +- gid:transitive-of-transitive-of-root:ext:ver transitive-of-transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct-of-root_ver.ini
new file mode 100644
index 0000000..a801f3f
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_direct-of-root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-of-root:ext:ver:transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini
new file mode 100644
index 0000000..37fe9ac
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:direct-of-root:ext:ver:direct-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-root_ver.ini
new file mode 100644
index 0000000..e34fa04
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-root_ver.ini
@@ -0,0 +1,2 @@
+[dependencies]
+gid:transitive-of-transitive-of-root:ext:ver:transitive-of-transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-root_ver.ini
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-root_ver.ini b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-root_ver.ini
new file mode 100644
index 0000000..61a252c
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/gid_transitive-of-transitive-of-root_ver.ini
@@ -0,0 +1 @@
+[dependencies]
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-root-scope-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-root-scope-exclusion-tree.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-root-scope-exclusion-tree.txt
new file mode 100644
index 0000000..dbee99b
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-root-scope-exclusion-tree.txt
@@ -0,0 +1,2 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-root-exclusion-tree.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-root-exclusion-tree.txt b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-root-exclusion-tree.txt
new file mode 100644
index 0000000..ef3dc74
--- /dev/null
+++ b/aether-impl/src/test/resources/artifact-descriptions/selection/scope/transitive-of-transitive-of-root-exclusion-tree.txt
@@ -0,0 +1,3 @@
+gid:root:ext:ver root-scope
++- gid:direct-of-root:ext:ver direct-of-root-scope
+ +- gid:transitive-of-root:ext:ver transitive-of-root-scope
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-spi/pom.xml
----------------------------------------------------------------------
diff --git a/aether-spi/pom.xml b/aether-spi/pom.xml
index 0b43c86..fde2d34 100644
--- a/aether-spi/pom.xml
+++ b/aether-spi/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-spi</artifactId>
@@ -48,7 +48,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-spi/src/main/java/org/eclipse/aether/spi/connector/transport/AbstractTransporter.java
----------------------------------------------------------------------
diff --git a/aether-spi/src/main/java/org/eclipse/aether/spi/connector/transport/AbstractTransporter.java b/aether-spi/src/main/java/org/eclipse/aether/spi/connector/transport/AbstractTransporter.java
index 21e54c9..acad985 100644
--- a/aether-spi/src/main/java/org/eclipse/aether/spi/connector/transport/AbstractTransporter.java
+++ b/aether-spi/src/main/java/org/eclipse/aether/spi/connector/transport/AbstractTransporter.java
@@ -19,7 +19,6 @@ package org.eclipse.aether.spi.connector.transport;
* under the License.
*/
-import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -96,25 +95,47 @@ public abstract class AbstractTransporter
protected void utilGet( GetTask task, InputStream is, boolean close, long length, boolean resume )
throws IOException, TransferCancelledException
{
+ OutputStream os = null;
try
{
+ os = task.newOutputStream( resume );
task.getListener().transportStarted( resume ? task.getResumeOffset() : 0, length );
- OutputStream os = task.newOutputStream( resume );
- try
- {
- copy( os, is, task.getListener() );
- os.close();
- }
- finally
+ copy( os, is, task.getListener() );
+ os.close();
+ os = null;
+
+ if ( close )
{
- close( os );
+ is.close();
+ is = null;
}
}
finally
{
- if ( close )
+ try
+ {
+ if ( os != null )
+ {
+ os.close();
+ }
+ }
+ catch ( final IOException e )
{
- close( is );
+ // Suppressed
+ }
+ finally
+ {
+ try
+ {
+ if ( close && is != null )
+ {
+ is.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
}
}
}
@@ -147,35 +168,56 @@ public abstract class AbstractTransporter
* @throws IOException If the transfer encountered an I/O error.
* @throws TransferCancelledException If the transfer was cancelled.
*/
- protected void utilPut( PutTask task, OutputStream os, boolean close )
+ protected void utilPut( PutTask task, OutputStream out, boolean close )
throws IOException, TransferCancelledException
{
+ InputStream in = null;
try
{
+ in = task.newInputStream();
task.getListener().transportStarted( 0, task.getDataLength() );
- InputStream is = task.newInputStream();
- try
- {
- copy( os, is, task.getListener() );
- }
- finally
- {
- close( is );
- }
+ copy( out, in, task.getListener() );
+
if ( close )
{
- os.close();
+ out.close();
}
else
{
- os.flush();
+ out.flush();
}
+
+ out = null;
+
+ in.close();
+ in = null;
}
finally
{
- if ( close )
+ try
+ {
+ if ( close && out != null )
+ {
+ out.close();
+ }
+ }
+ catch ( final IOException e )
{
- close( os );
+ // Suppressed
+ }
+ finally
+ {
+ try
+ {
+ if ( in != null )
+ {
+ in.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
}
}
}
@@ -215,19 +257,4 @@ public abstract class AbstractTransporter
}
}
- private static void close( Closeable file )
- {
- if ( file != null )
- {
- try
- {
- file.close();
- }
- catch ( IOException e )
- {
- // irrelevant
- }
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-test-util/pom.xml
----------------------------------------------------------------------
diff --git a/aether-test-util/pom.xml b/aether-test-util/pom.xml
index e47f125..a76176d 100644
--- a/aether-test-util/pom.xml
+++ b/aether-test-util/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-test-util</artifactId>
@@ -52,7 +52,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/DependencyGraphParser.java
----------------------------------------------------------------------
diff --git a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/DependencyGraphParser.java b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/DependencyGraphParser.java
index a745ccf..7976487 100644
--- a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/DependencyGraphParser.java
+++ b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/DependencyGraphParser.java
@@ -191,13 +191,23 @@ public class DependencyGraphParser
try
{
stream = resource.openStream();
- return parse( new BufferedReader( new InputStreamReader( stream, "UTF-8" ) ) );
+ final DependencyNode node = parse( new BufferedReader( new InputStreamReader( stream, "UTF-8" ) ) );
+ stream.close();
+ stream = null;
+ return node;
}
finally
{
- if ( stream != null )
+ try
+ {
+ if ( stream != null )
+ {
+ stream.close();
+ }
+ }
+ catch ( final IOException e )
{
- stream.close();
+ // Suppressed
}
}
}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/IniArtifactDataReader.java
----------------------------------------------------------------------
diff --git a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/IniArtifactDataReader.java b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/IniArtifactDataReader.java
index 4253544..b38c4d6 100644
--- a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/IniArtifactDataReader.java
+++ b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/IniArtifactDataReader.java
@@ -107,18 +107,14 @@ class IniArtifactDataReader
private ArtifactDescription parse( Reader reader )
throws IOException
{
- String line = null;
-
State state = State.NONE;
-
Map<State, List<String>> sections = new HashMap<State, List<String>>();
-
- BufferedReader in = new BufferedReader( reader );
+ BufferedReader in = null;
try
{
- while ( ( line = in.readLine() ) != null )
+ in = new BufferedReader( reader );
+ for ( String line = in.readLine(); line != null; line = in.readLine() )
{
-
line = cutComment( line );
if ( isEmpty( line ) )
{
@@ -149,10 +145,23 @@ class IniArtifactDataReader
lines.add( line.trim() );
}
}
+
+ in.close();
+ in = null;
}
finally
{
- in.close();
+ try
+ {
+ if ( in != null )
+ {
+ in.close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ // Suppressed
+ }
}
Artifact relocation = relocation( sections.get( State.RELOCATION ) );
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileProcessor.java
----------------------------------------------------------------------
diff --git a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileProcessor.java b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileProcessor.java
index fe130a3..6744583 100644
--- a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileProcessor.java
+++ b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileProcessor.java
@@ -100,6 +100,7 @@ public class TestFileProcessor
// allow output to report any flush/close errors
fos.close();
+ fos = null;
}
finally
{
@@ -121,6 +122,7 @@ public class TestFileProcessor
// allow output to report any flush/close errors
fos.close();
+ fos = null;
}
finally
{
@@ -137,8 +139,6 @@ public class TestFileProcessor
public long copy( File source, File target, ProgressListener listener )
throws IOException
{
- long total = 0;
-
InputStream fis = null;
OutputStream fos = null;
try
@@ -149,18 +149,22 @@ public class TestFileProcessor
fos = new BufferedOutputStream( new FileOutputStream( target ) );
- total = copy( fos, fis, listener );
+ final long total = copy( fos, fis, listener );
// allow output to report any flush/close errors
fos.close();
+ fos = null;
+
+ fis.close();
+ fis = null;
+
+ return total;
}
finally
{
close( fis );
close( fos );
}
-
- return total;
}
private long copy( OutputStream os, InputStream is, ProgressListener listener )
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileUtils.java
----------------------------------------------------------------------
diff --git a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileUtils.java b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileUtils.java
index 9757daa..be04bdc 100644
--- a/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileUtils.java
+++ b/aether-test-util/src/main/java/org/eclipse/aether/internal/test/util/TestFileUtils.java
@@ -198,8 +198,6 @@ public class TestFileUtils
public static long copyFile( File source, File target )
throws IOException
{
- long total = 0;
-
FileInputStream fis = null;
OutputStream fos = null;
try
@@ -210,7 +208,9 @@ public class TestFileUtils
fos = new BufferedOutputStream( new FileOutputStream( target ) );
- for ( byte[] buffer = new byte[1024 * 32];; )
+ long total = 0;
+
+ for ( byte[] buffer = new byte[ 1024 * 32 ];; )
{
int bytes = fis.read( buffer );
if ( bytes < 0 )
@@ -224,14 +224,18 @@ public class TestFileUtils
}
fos.close();
+ fos = null;
+
+ fis.close();
+ fis = null;
+
+ return total;
}
finally
{
close( fis );
close( fos );
}
-
- return total;
}
public static byte[] readBytes( File file )
@@ -243,6 +247,8 @@ public class TestFileUtils
in = new RandomAccessFile( file, "r" );
byte[] actual = new byte[(int) in.length()];
in.readFully( actual );
+ in.close();
+ in = null;
return actual;
}
finally
@@ -265,6 +271,7 @@ public class TestFileUtils
out.write( pattern );
}
out.close();
+ out = null;
}
finally
{
@@ -293,6 +300,8 @@ public class TestFileUtils
{
fis = new FileInputStream( file );
props.load( fis );
+ fis.close();
+ fis = null;
}
finally
{
@@ -311,6 +320,7 @@ public class TestFileUtils
fos = new FileOutputStream( file );
props.store( fos, "aether-test" );
fos.close();
+ fos = null;
}
finally
{
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-transport-classpath/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-classpath/pom.xml b/aether-transport-classpath/pom.xml
index f1d850f..f2e6579 100644
--- a/aether-transport-classpath/pom.xml
+++ b/aether-transport-classpath/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-transport-classpath</artifactId>
@@ -68,7 +68,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-transport-file/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-file/pom.xml b/aether-transport-file/pom.xml
index d724da1..a88dc49 100644
--- a/aether-transport-file/pom.xml
+++ b/aether-transport-file/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-transport-file</artifactId>
@@ -68,7 +68,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-transport-http/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/pom.xml b/aether-transport-http/pom.xml
index e8c29b6..835bce2 100644
--- a/aether-transport-http/pom.xml
+++ b/aether-transport-http/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-transport-http</artifactId>
@@ -52,7 +52,7 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
- <version>4.3.5</version>
+ <version>4.3.6</version>
<exclusions>
<exclusion>
<!-- using jcl-over-slf4j instead -->
@@ -64,7 +64,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
- <version>1.6.2</version>
+ <version>1.7.16</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
@@ -85,7 +85,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@@ -96,13 +96,13 @@
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
- <version>7.6.15.v20140411</version>
+ <version>7.6.19.v20160209</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
- <version>1.0.7</version>
+ <version>1.0.13</version>
<scope>test</scope>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-transport-wagon/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-wagon/pom.xml b/aether-transport-wagon/pom.xml
index d2d9c9a..bd3ad2a 100644
--- a/aether-transport-wagon/pom.xml
+++ b/aether-transport-wagon/pom.xml
@@ -26,7 +26,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-transport-wagon</artifactId>
@@ -73,13 +73,13 @@
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-classworlds</artifactId>
- <version>2.4</version>
+ <version>2.4.2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
- <version>2.1</version>
+ <version>3.0.24</version>
<optional>true</optional>
</dependency>
<dependency>
@@ -100,7 +100,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
----------------------------------------------------------------------
diff --git a/aether-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java b/aether-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
index e9f89c2..635f211 100644
--- a/aether-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
+++ b/aether-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
@@ -457,6 +457,7 @@ final class WagonTransporter
{
if ( path != null && !path.delete() && path.exists() )
{
+ path.deleteOnExit();
logger.debug( "Could not delete temorary file " + path );
}
}
@@ -594,23 +595,22 @@ final class WagonTransporter
private void readTempFile( File dst )
throws IOException
{
- FileInputStream fis = new FileInputStream( dst );
+ FileInputStream in = null;
+ OutputStream out = null;
try
{
- OutputStream os = task.newOutputStream();
- try
- {
- copy( os, fis );
- os.close();
- }
- finally
- {
- close( os );
- }
+ in = new FileInputStream( dst );
+ out = task.newOutputStream();
+ copy( out, in );
+ out.close();
+ out = null;
+ in.close();
+ in = null;
}
finally
{
- close( fis );
+ close( out );
+ close( in );
}
}
@@ -634,11 +634,14 @@ final class WagonTransporter
File file = task.getDataFile();
if ( file == null && wagon instanceof StreamingWagon )
{
- InputStream src = task.newInputStream();
+ InputStream src = null;
try
{
+ src = task.newInputStream();
// StreamingWagon uses an internal buffer on src input stream.
( (StreamingWagon) wagon ).putFromStream( src, dst, task.getDataLength(), -1 );
+ src.close();
+ src = null;
}
finally
{
@@ -665,34 +668,31 @@ final class WagonTransporter
private File createTempFile()
throws IOException
{
- File tmp = newTempFile();
+ File tmp = null;
+ FileOutputStream out = null;
+ InputStream in = null;
try
{
- FileOutputStream fos = new FileOutputStream( tmp );
- try
- {
- InputStream is = task.newInputStream();
- try
- {
- copy( fos, is );
- fos.close();
- }
- finally
- {
- close( is );
- }
- }
- finally
- {
- close( fos );
- }
+ tmp = newTempFile();
+ in = task.newInputStream();
+ out = new FileOutputStream( tmp );
+ copy( out, in );
+ out.close();
+ out = null;
+ in.close();
+ in = null;
+ return tmp;
}
catch ( IOException e )
{
delTempFile( tmp );
throw e;
}
- return tmp;
+ finally
+ {
+ close( out );
+ close( in );
+ }
}
}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-util/pom.xml
----------------------------------------------------------------------
diff --git a/aether-util/pom.xml b/aether-util/pom.xml
index 3bc25cc..2e3d0a5 100644
--- a/aether-util/pom.xml
+++ b/aether-util/pom.xml
@@ -25,7 +25,7 @@
<parent>
<groupId>org.apache.maven.aether</groupId>
<artifactId>aether</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>1.2.0-SNAPSHOT</version>
</parent>
<artifactId>aether-util</artifactId>
@@ -47,7 +47,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
+ <artifactId>hamcrest-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1ee92862/aether-util/src/main/java/org/eclipse/aether/util/ChecksumUtils.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/ChecksumUtils.java b/aether-util/src/main/java/org/eclipse/aether/util/ChecksumUtils.java
index b629c8d..f4b9b74 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/ChecksumUtils.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/ChecksumUtils.java
@@ -52,49 +52,34 @@ public final class ChecksumUtils
throws IOException
{
String checksum = "";
-
- FileInputStream fis = new FileInputStream( checksumFile );
+ BufferedReader reader = null;
try
{
- BufferedReader br = new BufferedReader( new InputStreamReader( fis, "UTF-8" ), 512 );
- try
+ reader = new BufferedReader( new InputStreamReader( new FileInputStream( checksumFile ), "UTF-8" ), 512 );
+ for ( String line = reader.readLine(); line != null; line = reader.readLine() )
{
- while ( true )
+ line = line.trim();
+ if ( line.length() > 0 )
{
- String line = br.readLine();
- if ( line == null )
- {
- break;
- }
- line = line.trim();
- if ( line.length() > 0 )
- {
- checksum = line;
- break;
- }
- }
- }
- finally
- {
- try
- {
- br.close();
- }
- catch ( IOException e )
- {
- // ignored
+ checksum = line;
+ break;
}
}
+ reader.close();
+ reader = null;
}
finally
{
try
{
- fis.close();
+ if ( reader != null )
+ {
+ reader.close();
+ }
}
catch ( IOException e )
{
- // ignored
+ // Suppressed
}
}
@@ -144,12 +129,13 @@ public final class ChecksumUtils
}
}
- FileInputStream fis = new FileInputStream( dataFile );
+ FileInputStream in = null;
try
{
- for ( byte[] buffer = new byte[32 * 1024];; )
+ in = new FileInputStream( dataFile );
+ for ( byte[] buffer = new byte[ 32 * 1024 ];; )
{
- int read = fis.read( buffer );
+ int read = in.read( buffer );
if ( read < 0 )
{
break;
@@ -159,16 +145,21 @@ public final class ChecksumUtils
digest.update( buffer, 0, read );
}
}
+ in.close();
+ in = null;
}
finally
{
try
{
- fis.close();
+ if ( in != null )
+ {
+ in.close();
+ }
}
catch ( IOException e )
{
- // ignored
+ // Suppressed
}
}