diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/AntModelResolver.java b/src/main/java/org/apache/maven/resolver/internal/ant/AntModelResolver.java
index acdf730..1a16e36 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/AntModelResolver.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/AntModelResolver.java
@@ -72,7 +72,7 @@
         this.repoSys = repoSys;
         this.remoteRepositoryManager = remoteRepositoryManager;
         this.repositories = repositories;
-        this.repositoryIds = new HashSet<String>();
+        this.repositoryIds = new HashSet<>();
     }
 
     private AntModelResolver( final AntModelResolver original )
@@ -82,7 +82,7 @@
         this.repoSys = original.repoSys;
         this.remoteRepositoryManager = original.remoteRepositoryManager;
         this.repositories = original.repositories;
-        this.repositoryIds = new HashSet<String>( original.repositoryIds );
+        this.repositoryIds = new HashSet<>( original.repositoryIds );
     }
 
     public void addRepository( final Repository repository )
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/ConverterUtils.java b/src/main/java/org/apache/maven/resolver/internal/ant/ConverterUtils.java
index 3e2d333..f522bb5 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/ConverterUtils.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/ConverterUtils.java
@@ -113,7 +113,7 @@
                                                                                  Collection<Exclusion> exclusions2 )
     {
         Collection<org.eclipse.aether.graph.Exclusion> results =
-            new LinkedHashSet<org.eclipse.aether.graph.Exclusion>();
+            new LinkedHashSet<>();
         if ( exclusions1 != null )
         {
             for ( Exclusion exclusion : exclusions1 )
@@ -202,11 +202,11 @@
         }
         else
         {
-            repositories = new ArrayList<RemoteRepository>();
+            repositories = new ArrayList<>();
         }
 
         List<org.eclipse.aether.repository.RemoteRepository> results =
-            new ArrayList<org.eclipse.aether.repository.RemoteRepository>();
+            new ArrayList<>();
         for ( RemoteRepository repo : repositories )
         {
             results.add( toRepository( repo ) );
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/ProjectWorkspaceReader.java b/src/main/java/org/apache/maven/resolver/internal/ant/ProjectWorkspaceReader.java
index cccc72a..867f3af 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/ProjectWorkspaceReader.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/ProjectWorkspaceReader.java
@@ -48,7 +48,7 @@
 
     private static final Object LOCK = new Object();
 
-    private Map<String, Artifact> artifacts = new ConcurrentHashMap<String, Artifact>();
+    private Map<String, Artifact> artifacts = new ConcurrentHashMap<>();
 
     public void addPom( Pom pom )
     {
@@ -107,7 +107,7 @@
 
     public List<String> findVersions( Artifact artifact )
     {
-        List<String> versions = new ArrayList<String>();
+        List<String> versions = new ArrayList<>();
         for ( Artifact art : artifacts.values() )
         {
             if ( ArtifactIdUtils.equalsVersionlessId( artifact, art ) )
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/SettingsUtils.java b/src/main/java/org/apache/maven/resolver/internal/ant/SettingsUtils.java
index 51cb0d1..f732210 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/SettingsUtils.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/SettingsUtils.java
@@ -43,7 +43,7 @@
             return null;
         }
 
-        List<org.apache.maven.model.Profile> results = new ArrayList<org.apache.maven.model.Profile>();
+        List<org.apache.maven.model.Profile> results = new ArrayList<>();
 
         for ( Profile profile : profiles )
         {
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/tasks/AbstractDistTask.java b/src/main/java/org/apache/maven/resolver/internal/ant/tasks/AbstractDistTask.java
index 12066a0..e8fd725 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/tasks/AbstractDistTask.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/tasks/AbstractDistTask.java
@@ -47,7 +47,7 @@
     {
         getArtifacts().validate( this );
 
-        final Map<String, File> duplicates = new HashMap<String, File>();
+        final Map<String, File> duplicates = new HashMap<>();
         for ( final Artifact artifact : getArtifacts().getArtifacts() )
         {
             final String key = artifact.getType() + ':' + artifact.getClassifier();
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Layout.java b/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Layout.java
index 1060c93..4cc5527 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Layout.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Layout.java
@@ -55,8 +55,8 @@
     Layout( String layout )
         throws BuildException
     {
-        Collection<String> valid = new HashSet<String>( Arrays.asList( GID, GID_DIRS, AID, VER, BVER, EXT, CLS ) );
-        List<String> tokens = new ArrayList<String>();
+        Collection<String> valid = new HashSet<>( Arrays.asList( GID, GID_DIRS, AID, VER, BVER, EXT, CLS ) );
+        List<String> tokens = new ArrayList<>();
         Matcher m = Pattern.compile( "(\\{[^}]*\\})|([^{]+)" ).matcher( layout );
         while ( m.find() )
         {
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Resolve.java b/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Resolve.java
index c17e359..631c052 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Resolve.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/tasks/Resolve.java
@@ -59,7 +59,7 @@
     extends AbstractResolvingTask
 {
 
-    private List<ArtifactConsumer> consumers = new ArrayList<ArtifactConsumer>();
+    private List<ArtifactConsumer> consumers = new ArrayList<>();
 
     private boolean failOnMissingAttachments;
 
@@ -132,7 +132,7 @@
         DependencyNode root = collectDependencies().getRoot();
         root.accept( new DependencyGraphLogger( this ) );
 
-        Map<String, Group> groups = new HashMap<String, Group>();
+        Map<String, Group> groups = new HashMap<>();
         for ( ArtifactConsumer consumer : consumers )
         {
             String classifier = consumer.getClassifier();
@@ -215,8 +215,8 @@
                 throw new BuildException( "You must not specify both 'scopes' and 'classpath'" );
             }
 
-            Collection<String> included = new HashSet<String>();
-            Collection<String> excluded = new HashSet<String>();
+            Collection<String> included = new HashSet<>();
+            Collection<String> excluded = new HashSet<>();
 
             String[] split = scopes.split( "[, ]" );
             for ( String scope : split )
@@ -504,9 +504,9 @@
 
         private String classifier;
 
-        private List<ArtifactConsumer> consumers = new ArrayList<ArtifactConsumer>();
+        private List<ArtifactConsumer> consumers = new ArrayList<>();
 
-        private List<ArtifactRequest> requests = new ArrayList<ArtifactRequest>();
+        private List<ArtifactRequest> requests = new ArrayList<>();
 
         Group( String classifier )
         {
@@ -525,7 +525,7 @@
 
         public void createRequests( DependencyNode node )
         {
-            createRequests( node, new LinkedList<DependencyNode>() );
+            createRequests( node, new LinkedList<>() );
         }
 
         private void createRequests( DependencyNode node, LinkedList<DependencyNode> parents )
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/types/Artifacts.java b/src/main/java/org/apache/maven/resolver/internal/ant/types/Artifacts.java
index 85f8b78..2b15ad9 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/types/Artifacts.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/types/Artifacts.java
@@ -33,7 +33,7 @@
     implements ArtifactContainer
 {
 
-    private List<ArtifactContainer> containers = new ArrayList<ArtifactContainer>();
+    private List<ArtifactContainer> containers = new ArrayList<>();
 
     protected Artifacts getRef()
     {
@@ -86,7 +86,7 @@
         {
             return getRef().getArtifacts();
         }
-        List<Artifact> artifacts = new ArrayList<Artifact>();
+        List<Artifact> artifacts = new ArrayList<>();
         for ( ArtifactContainer container : containers )
         {
             artifacts.addAll( container.getArtifacts() );
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/types/Authentication.java b/src/main/java/org/apache/maven/resolver/internal/ant/types/Authentication.java
index 6d212fc..e65326f 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/types/Authentication.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/types/Authentication.java
@@ -41,7 +41,7 @@
 
     private String passphrase;
 
-    private List<String> servers = new ArrayList<String>();
+    private List<String> servers = new ArrayList<>();
 
     @Override
     public void setProject( Project project )
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependencies.java b/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependencies.java
index 5e1ea3c..ee5bb4a 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependencies.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependencies.java
@@ -41,9 +41,9 @@
 
     private Pom pom;
 
-    private List<DependencyContainer> containers = new ArrayList<DependencyContainer>();
+    private List<DependencyContainer> containers = new ArrayList<>();
 
-    private List<Exclusion> exclusions = new ArrayList<Exclusion>();
+    private List<Exclusion> exclusions = new ArrayList<>();
 
     private boolean nestedDependencies;
 
@@ -64,7 +64,7 @@
             {
                 throw new BuildException( "A <pom> used for dependency resolution has to be backed by a pom.xml file" );
             }
-            Map<String, String> ids = new HashMap<String, String>();
+            Map<String, String> ids = new HashMap<>();
             for ( DependencyContainer container : containers )
             {
                 container.validate( task );
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependency.java b/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependency.java
index 9299a5f..8b24c03 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependency.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/types/Dependency.java
@@ -52,7 +52,7 @@
 
     private File systemPath;
 
-    private List<Exclusion> exclusions = new ArrayList<Exclusion>();
+    private List<Exclusion> exclusions = new ArrayList<>();
 
     protected Dependency getRef()
     {
diff --git a/src/main/java/org/apache/maven/resolver/internal/ant/types/RemoteRepositories.java b/src/main/java/org/apache/maven/resolver/internal/ant/types/RemoteRepositories.java
index 0b90877..c63a29d 100644
--- a/src/main/java/org/apache/maven/resolver/internal/ant/types/RemoteRepositories.java
+++ b/src/main/java/org/apache/maven/resolver/internal/ant/types/RemoteRepositories.java
@@ -33,7 +33,7 @@
     implements RemoteRepositoryContainer
 {
 
-    private List<RemoteRepositoryContainer> containers = new ArrayList<RemoteRepositoryContainer>();
+    private List<RemoteRepositoryContainer> containers = new ArrayList<>();
 
     protected RemoteRepositories getRef()
     {
@@ -86,7 +86,7 @@
         {
             return getRef().getRepositories();
         }
-        List<RemoteRepository> repos = new ArrayList<RemoteRepository>();
+        List<RemoteRepository> repos = new ArrayList<>();
         for ( RemoteRepositoryContainer container : containers )
         {
             repos.addAll( container.getRepositories() );
