001package org.apache.maven.bridge; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import java.io.File; 023import java.util.ArrayList; 024import java.util.Collection; 025import java.util.Collections; 026import java.util.HashMap; 027import java.util.LinkedHashMap; 028import java.util.List; 029import java.util.Map; 030 031import org.apache.maven.RepositoryUtils; 032import org.apache.maven.artifact.Artifact; 033import org.apache.maven.artifact.DefaultArtifact; 034import org.apache.maven.artifact.InvalidRepositoryException; 035import org.apache.maven.artifact.handler.ArtifactHandler; 036import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; 037import org.apache.maven.artifact.repository.ArtifactRepository; 038import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; 039import org.apache.maven.artifact.repository.Authentication; 040import org.apache.maven.artifact.repository.MavenArtifactRepository; 041import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; 042import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2; 043import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; 044import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; 045import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; 046import org.apache.maven.artifact.versioning.VersionRange; 047import org.apache.maven.model.Dependency; 048import org.apache.maven.model.Exclusion; 049import org.apache.maven.model.Plugin; 050import org.apache.maven.repository.Proxy; 051import org.apache.maven.settings.Mirror; 052import org.apache.maven.settings.Server; 053import org.apache.maven.settings.building.SettingsProblem; 054import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest; 055import org.apache.maven.settings.crypto.SettingsDecrypter; 056import org.apache.maven.settings.crypto.SettingsDecryptionRequest; 057import org.apache.maven.settings.crypto.SettingsDecryptionResult; 058import org.codehaus.plexus.PlexusContainer; 059import org.codehaus.plexus.component.annotations.Component; 060import org.codehaus.plexus.component.annotations.Requirement; 061import org.codehaus.plexus.logging.Logger; 062import org.codehaus.plexus.util.StringUtils; 063import org.eclipse.aether.RepositorySystemSession; 064import org.eclipse.aether.impl.ArtifactResolver; 065import org.eclipse.aether.repository.AuthenticationContext; 066import org.eclipse.aether.repository.AuthenticationSelector; 067import org.eclipse.aether.repository.ProxySelector; 068import org.eclipse.aether.repository.RemoteRepository; 069 070/** 071 * @author Jason van Zyl 072 */ 073@Component( role = MavenRepositorySystem.class, hint = "default" ) 074public class MavenRepositorySystem 075{ 076 077 @Requirement 078 private Logger logger; 079 080 @Requirement 081 private ArtifactHandlerManager artifactHandlerManager; 082 083 @Requirement 084 private ArtifactResolver artifactResolver; 085 086 @Requirement( role = ArtifactRepositoryLayout.class ) 087 private Map<String, ArtifactRepositoryLayout> layouts; 088 089 @Requirement 090 private PlexusContainer plexus; 091 092 @Requirement 093 private SettingsDecrypter settingsDecrypter; 094 095 // DefaultProjectBuilder 096 public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type ) 097 { 098 return XcreateArtifact( groupId, artifactId, version, scope, type ); 099 } 100 101 // DefaultProjectBuilder 102 public Artifact createProjectArtifact( String groupId, String artifactId, String metaVersionId ) 103 { 104 return XcreateProjectArtifact( groupId, artifactId, metaVersionId ); 105 } 106 107 // DefaultProjectBuilder 108 public Artifact createDependencyArtifact( Dependency d ) 109 { 110 if ( d.getVersion() == null ) 111 { 112 return null; 113 } 114 115 VersionRange versionRange; 116 try 117 { 118 versionRange = VersionRange.createFromVersionSpec( d.getVersion() ); 119 } 120 catch ( InvalidVersionSpecificationException e ) 121 { 122 return null; 123 } 124 125 Artifact artifact = 126 XcreateDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange, d.getType(), 127 d.getClassifier(), d.getScope(), d.isOptional() ); 128 129 if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && d.getSystemPath() != null ) 130 { 131 artifact.setFile( new File( d.getSystemPath() ) ); 132 } 133 134 if ( !d.getExclusions().isEmpty() ) 135 { 136 List<String> exclusions = new ArrayList<String>(); 137 138 for ( Exclusion exclusion : d.getExclusions() ) 139 { 140 exclusions.add( exclusion.getGroupId() + ':' + exclusion.getArtifactId() ); 141 } 142 143 artifact.setDependencyFilter( new ExcludesArtifactFilter( exclusions ) ); 144 } 145 146 return artifact; 147 } 148 149 // DefaultProjectBuilder 150 public Artifact createExtensionArtifact( String groupId, String artifactId, String version ) 151 { 152 VersionRange versionRange; 153 try 154 { 155 versionRange = VersionRange.createFromVersionSpec( version ); 156 } 157 catch ( InvalidVersionSpecificationException e ) 158 { 159 return null; 160 } 161 162 return XcreateExtensionArtifact( groupId, artifactId, versionRange ); 163 } 164 165 // DefaultProjectBuilder 166 public Artifact createParentArtifact( String groupId, String artifactId, String version ) 167 { 168 return XcreateParentArtifact( groupId, artifactId, version ); 169 } 170 171 // DefaultProjectBuilder 172 public Artifact createPluginArtifact( Plugin plugin ) 173 { 174 VersionRange versionRange; 175 try 176 { 177 String version = plugin.getVersion(); 178 if ( StringUtils.isEmpty( version ) ) 179 { 180 version = "RELEASE"; 181 } 182 versionRange = VersionRange.createFromVersionSpec( version ); 183 } 184 catch ( InvalidVersionSpecificationException e ) 185 { 186 return null; 187 } 188 189 return XcreatePluginArtifact( plugin.getGroupId(), plugin.getArtifactId(), versionRange ); 190 } 191 192 public List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories ) 193 { 194 if ( repositories == null ) 195 { 196 return null; 197 } 198 199 Map<String, List<ArtifactRepository>> reposByKey = new LinkedHashMap<String, List<ArtifactRepository>>(); 200 201 for ( ArtifactRepository repository : repositories ) 202 { 203 String key = repository.getId(); 204 205 List<ArtifactRepository> aliasedRepos = reposByKey.get( key ); 206 207 if ( aliasedRepos == null ) 208 { 209 aliasedRepos = new ArrayList<ArtifactRepository>(); 210 reposByKey.put( key, aliasedRepos ); 211 } 212 213 aliasedRepos.add( repository ); 214 } 215 216 List<ArtifactRepository> effectiveRepositories = new ArrayList<ArtifactRepository>(); 217 218 for ( List<ArtifactRepository> aliasedRepos : reposByKey.values() ) 219 { 220 List<ArtifactRepository> mirroredRepos = new ArrayList<ArtifactRepository>(); 221 222 List<ArtifactRepositoryPolicy> releasePolicies = 223 new ArrayList<ArtifactRepositoryPolicy>( aliasedRepos.size() ); 224 225 for ( ArtifactRepository aliasedRepo : aliasedRepos ) 226 { 227 releasePolicies.add( aliasedRepo.getReleases() ); 228 mirroredRepos.addAll( aliasedRepo.getMirroredRepositories() ); 229 } 230 231 ArtifactRepositoryPolicy releasePolicy = getEffectivePolicy( releasePolicies ); 232 233 List<ArtifactRepositoryPolicy> snapshotPolicies = 234 new ArrayList<ArtifactRepositoryPolicy>( aliasedRepos.size() ); 235 236 for ( ArtifactRepository aliasedRepo : aliasedRepos ) 237 { 238 snapshotPolicies.add( aliasedRepo.getSnapshots() ); 239 } 240 241 ArtifactRepositoryPolicy snapshotPolicy = getEffectivePolicy( snapshotPolicies ); 242 243 ArtifactRepository aliasedRepo = aliasedRepos.get( 0 ); 244 245 ArtifactRepository effectiveRepository = 246 createArtifactRepository( aliasedRepo.getId(), aliasedRepo.getUrl(), aliasedRepo.getLayout(), 247 snapshotPolicy, releasePolicy ); 248 249 effectiveRepository.setAuthentication( aliasedRepo.getAuthentication() ); 250 251 effectiveRepository.setProxy( aliasedRepo.getProxy() ); 252 253 effectiveRepository.setMirroredRepositories( mirroredRepos ); 254 255 effectiveRepositories.add( effectiveRepository ); 256 } 257 258 return effectiveRepositories; 259 } 260 261 private ArtifactRepositoryPolicy getEffectivePolicy( Collection<ArtifactRepositoryPolicy> policies ) 262 { 263 ArtifactRepositoryPolicy effectivePolicy = null; 264 265 for ( ArtifactRepositoryPolicy policy : policies ) 266 { 267 if ( effectivePolicy == null ) 268 { 269 effectivePolicy = new ArtifactRepositoryPolicy( policy ); 270 } 271 else 272 { 273 effectivePolicy.merge( policy ); 274 } 275 } 276 277 return effectivePolicy; 278 } 279 280 public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors ) 281 { 282 return MirrorSelector.getMirror( repository, mirrors ); 283 } 284 285 public void injectMirror( List<ArtifactRepository> repositories, List<Mirror> mirrors ) 286 { 287 if ( repositories != null && mirrors != null ) 288 { 289 for ( ArtifactRepository repository : repositories ) 290 { 291 Mirror mirror = getMirror( repository, mirrors ); 292 injectMirror( repository, mirror ); 293 } 294 } 295 } 296 297 private Mirror getMirror( RepositorySystemSession session, ArtifactRepository repository ) 298 { 299 if ( session != null ) 300 { 301 org.eclipse.aether.repository.MirrorSelector selector = session.getMirrorSelector(); 302 if ( selector != null ) 303 { 304 RemoteRepository repo = selector.getMirror( RepositoryUtils.toRepo( repository ) ); 305 if ( repo != null ) 306 { 307 Mirror mirror = new Mirror(); 308 mirror.setId( repo.getId() ); 309 mirror.setUrl( repo.getUrl() ); 310 mirror.setLayout( repo.getContentType() ); 311 return mirror; 312 } 313 } 314 } 315 return null; 316 } 317 318 public void injectMirror( RepositorySystemSession session, List<ArtifactRepository> repositories ) 319 { 320 if ( repositories != null && session != null ) 321 { 322 for ( ArtifactRepository repository : repositories ) 323 { 324 Mirror mirror = getMirror( session, repository ); 325 injectMirror( repository, mirror ); 326 } 327 } 328 } 329 330 private void injectMirror( ArtifactRepository repository, Mirror mirror ) 331 { 332 if ( mirror != null ) 333 { 334 ArtifactRepository original = 335 createArtifactRepository( repository.getId(), repository.getUrl(), repository.getLayout(), 336 repository.getSnapshots(), repository.getReleases() ); 337 338 repository.setMirroredRepositories( Collections.singletonList( original ) ); 339 340 repository.setId( mirror.getId() ); 341 repository.setUrl( mirror.getUrl() ); 342 343 if ( StringUtils.isNotEmpty( mirror.getLayout() ) ) 344 { 345 repository.setLayout( getLayout( mirror.getLayout() ) ); 346 } 347 } 348 } 349 350 public void injectAuthentication( List<ArtifactRepository> repositories, List<Server> servers ) 351 { 352 if ( repositories != null ) 353 { 354 Map<String, Server> serversById = new HashMap<String, Server>(); 355 356 if ( servers != null ) 357 { 358 for ( Server server : servers ) 359 { 360 if ( !serversById.containsKey( server.getId() ) ) 361 { 362 serversById.put( server.getId(), server ); 363 } 364 } 365 } 366 367 for ( ArtifactRepository repository : repositories ) 368 { 369 Server server = serversById.get( repository.getId() ); 370 371 if ( server != null ) 372 { 373 SettingsDecryptionRequest request = new DefaultSettingsDecryptionRequest( server ); 374 SettingsDecryptionResult result = settingsDecrypter.decrypt( request ); 375 server = result.getServer(); 376 377 if ( logger.isDebugEnabled() ) 378 { 379 for ( SettingsProblem problem : result.getProblems() ) 380 { 381 logger.debug( problem.getMessage(), problem.getException() ); 382 } 383 } 384 385 Authentication authentication = new Authentication( server.getUsername(), server.getPassword() ); 386 authentication.setPrivateKey( server.getPrivateKey() ); 387 authentication.setPassphrase( server.getPassphrase() ); 388 389 repository.setAuthentication( authentication ); 390 } 391 else 392 { 393 repository.setAuthentication( null ); 394 } 395 } 396 } 397 } 398 399 private Authentication getAuthentication( RepositorySystemSession session, ArtifactRepository repository ) 400 { 401 if ( session != null ) 402 { 403 AuthenticationSelector selector = session.getAuthenticationSelector(); 404 if ( selector != null ) 405 { 406 RemoteRepository repo = RepositoryUtils.toRepo( repository ); 407 org.eclipse.aether.repository.Authentication auth = selector.getAuthentication( repo ); 408 if ( auth != null ) 409 { 410 repo = new RemoteRepository.Builder( repo ).setAuthentication( auth ).build(); 411 AuthenticationContext authCtx = AuthenticationContext.forRepository( session, repo ); 412 Authentication result = 413 new Authentication( authCtx.get( AuthenticationContext.USERNAME ), 414 authCtx.get( AuthenticationContext.PASSWORD ) ); 415 result.setPrivateKey( authCtx.get( AuthenticationContext.PRIVATE_KEY_PATH ) ); 416 result.setPassphrase( authCtx.get( AuthenticationContext.PRIVATE_KEY_PASSPHRASE ) ); 417 authCtx.close(); 418 return result; 419 } 420 } 421 } 422 return null; 423 } 424 425 public void injectAuthentication( RepositorySystemSession session, List<ArtifactRepository> repositories ) 426 { 427 if ( repositories != null && session != null ) 428 { 429 for ( ArtifactRepository repository : repositories ) 430 { 431 repository.setAuthentication( getAuthentication( session, repository ) ); 432 } 433 } 434 } 435 436 private Proxy getProxy( RepositorySystemSession session, ArtifactRepository repository ) 437 { 438 if ( session != null ) 439 { 440 ProxySelector selector = session.getProxySelector(); 441 if ( selector != null ) 442 { 443 RemoteRepository repo = RepositoryUtils.toRepo( repository ); 444 org.eclipse.aether.repository.Proxy proxy = selector.getProxy( repo ); 445 if ( proxy != null ) 446 { 447 Proxy p = new Proxy(); 448 p.setHost( proxy.getHost() ); 449 p.setProtocol( proxy.getType() ); 450 p.setPort( proxy.getPort() ); 451 if ( proxy.getAuthentication() != null ) 452 { 453 repo = new RemoteRepository.Builder( repo ).setProxy( proxy ).build(); 454 AuthenticationContext authCtx = AuthenticationContext.forProxy( session, repo ); 455 p.setUserName( authCtx.get( AuthenticationContext.USERNAME ) ); 456 p.setPassword( authCtx.get( AuthenticationContext.PASSWORD ) ); 457 p.setNtlmDomain( authCtx.get( AuthenticationContext.NTLM_DOMAIN ) ); 458 p.setNtlmHost( authCtx.get( AuthenticationContext.NTLM_WORKSTATION ) ); 459 authCtx.close(); 460 } 461 return p; 462 } 463 } 464 } 465 return null; 466 } 467 468 public void injectProxy( RepositorySystemSession session, List<ArtifactRepository> repositories ) 469 { 470 if ( repositories != null && session != null ) 471 { 472 for ( ArtifactRepository repository : repositories ) 473 { 474 repository.setProxy( getProxy( session, repository ) ); 475 } 476 } 477 } 478 479 private ArtifactRepositoryLayout getLayout( String id ) 480 { 481 ArtifactRepositoryLayout layout = layouts.get( id ); 482 483 return layout; 484 } 485 486 487 // 488 // Taken from LegacyRepositorySystem 489 // 490 491 public static org.apache.maven.model.Repository fromSettingsRepository( org.apache.maven.settings.Repository settingsRepository ) 492 { 493 org.apache.maven.model.Repository modelRepository = new org.apache.maven.model.Repository(); 494 modelRepository.setId( settingsRepository.getId() ); 495 modelRepository.setLayout( settingsRepository.getLayout() ); 496 modelRepository.setName( settingsRepository.getName() ); 497 modelRepository.setUrl( settingsRepository.getUrl() ); 498 modelRepository.setReleases( fromSettingsRepositoryPolicy( settingsRepository.getReleases() ) ); 499 modelRepository.setSnapshots( fromSettingsRepositoryPolicy( settingsRepository.getSnapshots() ) ); 500 return modelRepository; 501 } 502 503 public static org.apache.maven.model.RepositoryPolicy fromSettingsRepositoryPolicy( org.apache.maven.settings.RepositoryPolicy settingsRepositoryPolicy ) 504 { 505 org.apache.maven.model.RepositoryPolicy modelRepositoryPolicy = new org.apache.maven.model.RepositoryPolicy(); 506 if ( settingsRepositoryPolicy != null ) 507 { 508 modelRepositoryPolicy.setEnabled( settingsRepositoryPolicy.isEnabled() ); 509 modelRepositoryPolicy.setUpdatePolicy( settingsRepositoryPolicy.getUpdatePolicy() ); 510 modelRepositoryPolicy.setChecksumPolicy( settingsRepositoryPolicy.getChecksumPolicy() ); 511 } 512 return modelRepositoryPolicy; 513 } 514 515 public static ArtifactRepository buildArtifactRepository( org.apache.maven.settings.Repository repo ) 516 throws InvalidRepositoryException 517 { 518 return buildArtifactRepository( fromSettingsRepository( repo ) ); 519 } 520 521 public static ArtifactRepository buildArtifactRepository( org.apache.maven.model.Repository repo ) 522 throws InvalidRepositoryException 523 { 524 if ( repo != null ) 525 { 526 String id = repo.getId(); 527 528 if ( StringUtils.isEmpty( id ) ) 529 { 530 throw new InvalidRepositoryException( "Repository identifier missing", "" ); 531 } 532 533 String url = repo.getUrl(); 534 535 if ( StringUtils.isEmpty( url ) ) 536 { 537 throw new InvalidRepositoryException( "URL missing for repository " + id, id ); 538 } 539 540 ArtifactRepositoryPolicy snapshots = buildArtifactRepositoryPolicy( repo.getSnapshots() ); 541 542 ArtifactRepositoryPolicy releases = buildArtifactRepositoryPolicy( repo.getReleases() ); 543 544 ArtifactRepositoryLayout layout = new DefaultRepositoryLayout(); 545 546 return createArtifactRepository( id, url, layout, snapshots, releases ); 547 } 548 else 549 { 550 return null; 551 } 552 } 553 554 public static ArtifactRepositoryPolicy buildArtifactRepositoryPolicy( org.apache.maven.model.RepositoryPolicy policy ) 555 { 556 boolean enabled = true; 557 558 String updatePolicy = null; 559 560 String checksumPolicy = null; 561 562 if ( policy != null ) 563 { 564 enabled = policy.isEnabled(); 565 566 if ( policy.getUpdatePolicy() != null ) 567 { 568 updatePolicy = policy.getUpdatePolicy(); 569 } 570 if ( policy.getChecksumPolicy() != null ) 571 { 572 checksumPolicy = policy.getChecksumPolicy(); 573 } 574 } 575 576 return new ArtifactRepositoryPolicy( enabled, updatePolicy, checksumPolicy ); 577 } 578 579 public static ArtifactRepository createArtifactRepository( String id, String url, 580 ArtifactRepositoryLayout repositoryLayout, 581 ArtifactRepositoryPolicy snapshots, 582 ArtifactRepositoryPolicy releases ) 583 { 584 if ( snapshots == null ) 585 { 586 snapshots = new ArtifactRepositoryPolicy(); 587 } 588 589 if ( releases == null ) 590 { 591 releases = new ArtifactRepositoryPolicy(); 592 } 593 594 ArtifactRepository repository; 595 if ( repositoryLayout instanceof ArtifactRepositoryLayout2 ) 596 { 597 repository = 598 ( (ArtifactRepositoryLayout2) repositoryLayout ).newMavenArtifactRepository( id, url, snapshots, 599 releases ); 600 } 601 else 602 { 603 repository = new MavenArtifactRepository( id, url, repositoryLayout, snapshots, releases ); 604 } 605 606 return repository; 607 } 608 609 // ArtifactFactory 610 private Artifact XcreateArtifact( String groupId, String artifactId, String version, String scope, String type ) 611 { 612 return XcreateArtifact( groupId, artifactId, version, scope, type, null, null ); 613 } 614 615 private Artifact XcreateDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, 616 String type, String classifier, String scope, boolean optional ) 617 { 618 return XcreateArtifact( groupId, artifactId, versionRange, type, classifier, scope, null, optional ); 619 } 620 621 private Artifact XcreateProjectArtifact( String groupId, String artifactId, String version ) 622 { 623 return XcreateProjectArtifact( groupId, artifactId, version, null ); 624 } 625 626 private Artifact XcreateParentArtifact( String groupId, String artifactId, String version ) 627 { 628 return XcreateProjectArtifact( groupId, artifactId, version ); 629 } 630 631 private Artifact XcreatePluginArtifact( String groupId, String artifactId, VersionRange versionRange ) 632 { 633 return XcreateArtifact( groupId, artifactId, versionRange, "maven-plugin", null, Artifact.SCOPE_RUNTIME, null ); 634 } 635 636 private Artifact XcreateProjectArtifact( String groupId, String artifactId, String version, String scope ) 637 { 638 return XcreateArtifact( groupId, artifactId, version, scope, "pom" ); 639 } 640 641 private Artifact XcreateExtensionArtifact( String groupId, String artifactId, VersionRange versionRange ) 642 { 643 return XcreateArtifact( groupId, artifactId, versionRange, "jar", null, Artifact.SCOPE_RUNTIME, null ); 644 } 645 646 private Artifact XcreateArtifact( String groupId, String artifactId, String version, String scope, String type, 647 String classifier, String inheritedScope ) 648 { 649 VersionRange versionRange = null; 650 if ( version != null ) 651 { 652 versionRange = VersionRange.createFromVersion( version ); 653 } 654 return XcreateArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope ); 655 } 656 657 private Artifact XcreateArtifact( String groupId, String artifactId, VersionRange versionRange, String type, 658 String classifier, String scope, String inheritedScope ) 659 { 660 return XcreateArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope, false ); 661 } 662 663 private Artifact XcreateArtifact( String groupId, String artifactId, VersionRange versionRange, String type, 664 String classifier, String scope, String inheritedScope, boolean optional ) 665 { 666 String desiredScope = Artifact.SCOPE_RUNTIME; 667 668 if ( inheritedScope == null ) 669 { 670 desiredScope = scope; 671 } 672 else if ( Artifact.SCOPE_TEST.equals( scope ) || Artifact.SCOPE_PROVIDED.equals( scope ) ) 673 { 674 return null; 675 } 676 else if ( Artifact.SCOPE_COMPILE.equals( scope ) && Artifact.SCOPE_COMPILE.equals( inheritedScope ) ) 677 { 678 // added to retain compile artifactScope. Remove if you want compile inherited as runtime 679 desiredScope = Artifact.SCOPE_COMPILE; 680 } 681 682 if ( Artifact.SCOPE_TEST.equals( inheritedScope ) ) 683 { 684 desiredScope = Artifact.SCOPE_TEST; 685 } 686 687 if ( Artifact.SCOPE_PROVIDED.equals( inheritedScope ) ) 688 { 689 desiredScope = Artifact.SCOPE_PROVIDED; 690 } 691 692 if ( Artifact.SCOPE_SYSTEM.equals( scope ) ) 693 { 694 // system scopes come through unchanged... 695 desiredScope = Artifact.SCOPE_SYSTEM; 696 } 697 698 ArtifactHandler handler = artifactHandlerManager.getArtifactHandler( type ); 699 700 return new DefaultArtifact( groupId, artifactId, versionRange, desiredScope, type, classifier, handler, 701 optional ); 702 } 703}