001package org.apache.maven.project; 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.io.IOException; 024import java.io.Writer; 025import java.util.ArrayList; 026import java.util.Collections; 027import java.util.HashMap; 028import java.util.LinkedHashMap; 029import java.util.LinkedHashSet; 030import java.util.List; 031import java.util.Map; 032import java.util.Properties; 033import java.util.Set; 034 035import org.apache.maven.RepositoryUtils; 036import org.apache.maven.artifact.Artifact; 037import org.apache.maven.artifact.ArtifactUtils; 038import org.apache.maven.artifact.DependencyResolutionRequiredException; 039// remove once createArtifacts() is removed 040import org.apache.maven.artifact.factory.ArtifactFactory; 041import org.apache.maven.artifact.repository.ArtifactRepository; 042import org.apache.maven.artifact.resolver.filter.ArtifactFilter; 043import org.apache.maven.model.Build; 044import org.apache.maven.model.CiManagement; 045import org.apache.maven.model.Contributor; 046import org.apache.maven.model.Dependency; 047import org.apache.maven.model.DependencyManagement; 048import org.apache.maven.model.Developer; 049import org.apache.maven.model.DistributionManagement; 050import org.apache.maven.model.Extension; 051import org.apache.maven.model.IssueManagement; 052import org.apache.maven.model.License; 053import org.apache.maven.model.MailingList; 054import org.apache.maven.model.Model; 055import org.apache.maven.model.Organization; 056import org.apache.maven.model.Plugin; 057import org.apache.maven.model.PluginExecution; 058import org.apache.maven.model.PluginManagement; 059import org.apache.maven.model.Prerequisites; 060import org.apache.maven.model.Profile; 061import org.apache.maven.model.ReportPlugin; 062import org.apache.maven.model.ReportSet; 063import org.apache.maven.model.Reporting; 064import org.apache.maven.model.Repository; 065import org.apache.maven.model.Resource; 066import org.apache.maven.model.Scm; 067import org.apache.maven.model.io.xpp3.MavenXpp3Writer; 068import org.apache.maven.project.artifact.InvalidDependencyVersionException; 069import org.apache.maven.project.artifact.MavenMetadataSource; 070import org.codehaus.plexus.classworlds.realm.ClassRealm; 071import org.codehaus.plexus.util.xml.Xpp3Dom; 072import org.eclipse.aether.graph.DependencyFilter; 073import org.eclipse.aether.repository.RemoteRepository; 074 075/** 076 * The concern of the project is provide runtime values based on the model. 077 * <p/> 078 * The values in the model remain untouched but during the process of building a project notions like inheritance and 079 * interpolation can be added. This allows to have an entity which is useful in a runtime while preserving the model so 080 * that it can be marshalled and unmarshalled without being tainted by runtime requirements. 081 * <p/> 082 * <p> 083 * With changes during 3.2.2 release MavenProject is closer to being immutable after construction with the removal of 084 * all components from this class, and the upfront construction taken care of entirely by the @{ProjectBuilder}. There 085 * is still the issue of having to run the lifecycle in order to find all the compile source roots and resource 086 * directories but I hope to take care of this during the Maven 4.0 release (jvz). 087 * </p> 088 */ 089public class MavenProject 090 implements Cloneable 091{ 092 public static final String EMPTY_PROJECT_GROUP_ID = "unknown"; 093 094 public static final String EMPTY_PROJECT_ARTIFACT_ID = "empty-project"; 095 096 public static final String EMPTY_PROJECT_VERSION = "0"; 097 098 private Model model; 099 100 private MavenProject parent; 101 102 private File file; 103 104 private Set<Artifact> resolvedArtifacts; 105 106 private ArtifactFilter artifactFilter; 107 108 private Set<Artifact> artifacts; 109 110 private Artifact parentArtifact; 111 112 private Set<Artifact> pluginArtifacts; 113 114 private List<ArtifactRepository> remoteArtifactRepositories; 115 116 private List<ArtifactRepository> pluginArtifactRepositories; 117 118 private List<RemoteRepository> remoteProjectRepositories; 119 120 private List<RemoteRepository> remotePluginRepositories; 121 122 private List<Artifact> attachedArtifacts; 123 124 private MavenProject executionProject; 125 126 private List<MavenProject> collectedProjects; 127 128 private List<String> compileSourceRoots = new ArrayList<String>(); 129 130 private List<String> testCompileSourceRoots = new ArrayList<String>(); 131 132 private List<String> scriptSourceRoots = new ArrayList<String>(); 133 134 private ArtifactRepository releaseArtifactRepository; 135 136 private ArtifactRepository snapshotArtifactRepository; 137 138 private List<Profile> activeProfiles = new ArrayList<Profile>(); 139 140 private Map<String, List<String>> injectedProfileIds = new LinkedHashMap<String, List<String>>(); 141 142 private Set<Artifact> dependencyArtifacts; 143 144 private Artifact artifact; 145 146 // calculated. 147 private Map<String, Artifact> artifactMap; 148 149 private Model originalModel; 150 151 private Map<String, Artifact> pluginArtifactMap; 152 153 private Set<Artifact> reportArtifacts; 154 155 private Map<String, Artifact> reportArtifactMap; 156 157 private Set<Artifact> extensionArtifacts; 158 159 private Map<String, Artifact> extensionArtifactMap; 160 161 private Map<String, Artifact> managedVersionMap; 162 163 private Map<String, MavenProject> projectReferences = new HashMap<String, MavenProject>(); 164 165 private boolean executionRoot; 166 167 private File parentFile; 168 169 private Map<String, Object> context; 170 171 private ClassRealm classRealm; 172 173 private DependencyFilter extensionDependencyFilter; 174 175 private final Set<String> lifecyclePhases = Collections.synchronizedSet( new LinkedHashSet<String>() ); 176 177 public MavenProject() 178 { 179 Model model = new Model(); 180 181 model.setGroupId( EMPTY_PROJECT_GROUP_ID ); 182 model.setArtifactId( EMPTY_PROJECT_ARTIFACT_ID ); 183 model.setVersion( EMPTY_PROJECT_VERSION ); 184 185 setModel( model ); 186 } 187 188 public MavenProject( Model model ) 189 { 190 setModel( model ); 191 } 192 193 public MavenProject( MavenProject project ) 194 { 195 deepCopy( project ); 196 } 197 198 public File getParentFile() 199 { 200 return parentFile; 201 } 202 203 public void setParentFile( File parentFile ) 204 { 205 this.parentFile = parentFile; 206 } 207 208 // ---------------------------------------------------------------------- 209 // Accessors 210 // ---------------------------------------------------------------------- 211 212 public Artifact getArtifact() 213 { 214 return artifact; 215 } 216 217 public void setArtifact( Artifact artifact ) 218 { 219 this.artifact = artifact; 220 } 221 222 // @todo I would like to get rid of this. jvz. 223 public Model getModel() 224 { 225 return model; 226 } 227 228 /** 229 * Returns the project corresponding to a declared parent. 230 * 231 * @return the parent, or null if no parent is declared or there was an error building it 232 */ 233 public MavenProject getParent() 234 { 235 return parent; 236 } 237 238 public void setParent( MavenProject parent ) 239 { 240 this.parent = parent; 241 } 242 243 public boolean hasParent() 244 { 245 return getParent() != null; 246 } 247 248 public File getFile() 249 { 250 return file; 251 } 252 253 public void setFile( File file ) 254 { 255 this.file = file; 256 } 257 258 public File getBasedir() 259 { 260 if ( getFile() != null ) 261 { 262 return getFile().getParentFile(); 263 } 264 else 265 { 266 // repository based POM 267 return null; 268 } 269 } 270 271 public void setDependencies( List<Dependency> dependencies ) 272 { 273 getModel().setDependencies( dependencies ); 274 } 275 276 public List<Dependency> getDependencies() 277 { 278 return getModel().getDependencies(); 279 } 280 281 public DependencyManagement getDependencyManagement() 282 { 283 return getModel().getDependencyManagement(); 284 } 285 286 // ---------------------------------------------------------------------- 287 // Test and compile sourceroots. 288 // ---------------------------------------------------------------------- 289 290 private void addPath( List<String> paths, String path ) 291 { 292 if ( path != null ) 293 { 294 path = path.trim(); 295 if ( path.length() > 0 ) 296 { 297 File file = new File( path ); 298 if ( file.isAbsolute() ) 299 { 300 path = file.getAbsolutePath(); 301 } 302 else 303 { 304 path = new File( getBasedir(), path ).getAbsolutePath(); 305 } 306 307 if ( !paths.contains( path ) ) 308 { 309 paths.add( path ); 310 } 311 } 312 } 313 } 314 315 public void addCompileSourceRoot( String path ) 316 { 317 addPath( getCompileSourceRoots(), path ); 318 } 319 320 public void addTestCompileSourceRoot( String path ) 321 { 322 addPath( getTestCompileSourceRoots(), path ); 323 } 324 325 public List<String> getCompileSourceRoots() 326 { 327 return compileSourceRoots; 328 } 329 330 public List<String> getTestCompileSourceRoots() 331 { 332 return testCompileSourceRoots; 333 } 334 335 public List<String> getCompileClasspathElements() 336 throws DependencyResolutionRequiredException 337 { 338 List<String> list = new ArrayList<String>( getArtifacts().size() + 1 ); 339 340 String d = getBuild().getOutputDirectory(); 341 if ( d != null ) 342 { 343 list.add( d ); 344 } 345 346 for ( Artifact a : getArtifacts() ) 347 { 348 if ( a.getArtifactHandler().isAddedToClasspath() ) 349 { 350 // TODO: let the scope handler deal with this 351 if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) 352 || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) ) 353 { 354 addArtifactPath( a, list ); 355 } 356 } 357 } 358 359 return list; 360 } 361 362 // TODO: this checking for file == null happens because the resolver has been confused about the root 363 // artifact or not. things like the stupid dummy artifact coming from surefire. 364 public List<String> getTestClasspathElements() 365 throws DependencyResolutionRequiredException 366 { 367 List<String> list = new ArrayList<String>( getArtifacts().size() + 2 ); 368 369 String d = getBuild().getTestOutputDirectory(); 370 if ( d != null ) 371 { 372 list.add( d ); 373 } 374 375 d = getBuild().getOutputDirectory(); 376 if ( d != null ) 377 { 378 list.add( d ); 379 } 380 381 for ( Artifact a : getArtifacts() ) 382 { 383 if ( a.getArtifactHandler().isAddedToClasspath() ) 384 { 385 addArtifactPath( a, list ); 386 } 387 } 388 389 return list; 390 } 391 392 public List<String> getRuntimeClasspathElements() 393 throws DependencyResolutionRequiredException 394 { 395 List<String> list = new ArrayList<String>( getArtifacts().size() + 1 ); 396 397 String d = getBuild().getOutputDirectory(); 398 if ( d != null ) 399 { 400 list.add( d ); 401 } 402 403 for ( Artifact a : getArtifacts() ) 404 { 405 if ( a.getArtifactHandler().isAddedToClasspath() 406 // TODO: let the scope handler deal with this 407 && ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) ) 408 { 409 addArtifactPath( a, list ); 410 } 411 } 412 return list; 413 } 414 415 // ---------------------------------------------------------------------- 416 // Delegate to the model 417 // ---------------------------------------------------------------------- 418 419 public void setModelVersion( String pomVersion ) 420 { 421 getModel().setModelVersion( pomVersion ); 422 } 423 424 public String getModelVersion() 425 { 426 return getModel().getModelVersion(); 427 } 428 429 public String getId() 430 { 431 return getModel().getId(); 432 } 433 434 public void setGroupId( String groupId ) 435 { 436 getModel().setGroupId( groupId ); 437 } 438 439 public String getGroupId() 440 { 441 String groupId = getModel().getGroupId(); 442 443 if ( ( groupId == null ) && ( getModel().getParent() != null ) ) 444 { 445 groupId = getModel().getParent().getGroupId(); 446 } 447 448 return groupId; 449 } 450 451 public void setArtifactId( String artifactId ) 452 { 453 getModel().setArtifactId( artifactId ); 454 } 455 456 public String getArtifactId() 457 { 458 return getModel().getArtifactId(); 459 } 460 461 public void setName( String name ) 462 { 463 getModel().setName( name ); 464 } 465 466 public String getName() 467 { 468 // TODO: this should not be allowed to be null. 469 if ( getModel().getName() != null ) 470 { 471 return getModel().getName(); 472 } 473 else 474 { 475 return getArtifactId(); 476 } 477 } 478 479 public void setVersion( String version ) 480 { 481 getModel().setVersion( version ); 482 } 483 484 public String getVersion() 485 { 486 String version = getModel().getVersion(); 487 488 if ( ( version == null ) && ( getModel().getParent() != null ) ) 489 { 490 version = getModel().getParent().getVersion(); 491 } 492 493 return version; 494 } 495 496 public String getPackaging() 497 { 498 return getModel().getPackaging(); 499 } 500 501 public void setPackaging( String packaging ) 502 { 503 getModel().setPackaging( packaging ); 504 } 505 506 public void setInceptionYear( String inceptionYear ) 507 { 508 getModel().setInceptionYear( inceptionYear ); 509 } 510 511 public String getInceptionYear() 512 { 513 return getModel().getInceptionYear(); 514 } 515 516 public void setUrl( String url ) 517 { 518 getModel().setUrl( url ); 519 } 520 521 public String getUrl() 522 { 523 return getModel().getUrl(); 524 } 525 526 public Prerequisites getPrerequisites() 527 { 528 return getModel().getPrerequisites(); 529 } 530 531 public void setIssueManagement( IssueManagement issueManagement ) 532 { 533 getModel().setIssueManagement( issueManagement ); 534 } 535 536 public CiManagement getCiManagement() 537 { 538 return getModel().getCiManagement(); 539 } 540 541 public void setCiManagement( CiManagement ciManagement ) 542 { 543 getModel().setCiManagement( ciManagement ); 544 } 545 546 public IssueManagement getIssueManagement() 547 { 548 return getModel().getIssueManagement(); 549 } 550 551 public void setDistributionManagement( DistributionManagement distributionManagement ) 552 { 553 getModel().setDistributionManagement( distributionManagement ); 554 } 555 556 public DistributionManagement getDistributionManagement() 557 { 558 return getModel().getDistributionManagement(); 559 } 560 561 public void setDescription( String description ) 562 { 563 getModel().setDescription( description ); 564 } 565 566 public String getDescription() 567 { 568 return getModel().getDescription(); 569 } 570 571 public void setOrganization( Organization organization ) 572 { 573 getModel().setOrganization( organization ); 574 } 575 576 public Organization getOrganization() 577 { 578 return getModel().getOrganization(); 579 } 580 581 public void setScm( Scm scm ) 582 { 583 getModel().setScm( scm ); 584 } 585 586 public Scm getScm() 587 { 588 return getModel().getScm(); 589 } 590 591 public void setMailingLists( List<MailingList> mailingLists ) 592 { 593 getModel().setMailingLists( mailingLists ); 594 } 595 596 public List<MailingList> getMailingLists() 597 { 598 return getModel().getMailingLists(); 599 } 600 601 public void addMailingList( MailingList mailingList ) 602 { 603 getModel().addMailingList( mailingList ); 604 } 605 606 public void setDevelopers( List<Developer> developers ) 607 { 608 getModel().setDevelopers( developers ); 609 } 610 611 public List<Developer> getDevelopers() 612 { 613 return getModel().getDevelopers(); 614 } 615 616 public void addDeveloper( Developer developer ) 617 { 618 getModel().addDeveloper( developer ); 619 } 620 621 public void setContributors( List<Contributor> contributors ) 622 { 623 getModel().setContributors( contributors ); 624 } 625 626 public List<Contributor> getContributors() 627 { 628 return getModel().getContributors(); 629 } 630 631 public void addContributor( Contributor contributor ) 632 { 633 getModel().addContributor( contributor ); 634 } 635 636 public void setBuild( Build build ) 637 { 638 getModel().setBuild( build ); 639 } 640 641 public Build getBuild() 642 { 643 return getModelBuild(); 644 } 645 646 public List<Resource> getResources() 647 { 648 return getBuild().getResources(); 649 } 650 651 public List<Resource> getTestResources() 652 { 653 return getBuild().getTestResources(); 654 } 655 656 public void addResource( Resource resource ) 657 { 658 getBuild().addResource( resource ); 659 } 660 661 public void addTestResource( Resource testResource ) 662 { 663 getBuild().addTestResource( testResource ); 664 } 665 666 public void setLicenses( List<License> licenses ) 667 { 668 getModel().setLicenses( licenses ); 669 } 670 671 public List<License> getLicenses() 672 { 673 return getModel().getLicenses(); 674 } 675 676 public void addLicense( License license ) 677 { 678 getModel().addLicense( license ); 679 } 680 681 public void setArtifacts( Set<Artifact> artifacts ) 682 { 683 this.artifacts = artifacts; 684 685 // flush the calculated artifactMap 686 artifactMap = null; 687 } 688 689 /** 690 * All dependencies that this project has, including transitive ones. Contents are lazily populated, so depending on 691 * what phases have run dependencies in some scopes won't be included. eg. if only compile phase has run, 692 * dependencies with scope test won't be included. 693 * 694 * @return {@link Set} < {@link Artifact} > 695 * @see #getDependencyArtifacts() to get only direct dependencies 696 */ 697 public Set<Artifact> getArtifacts() 698 { 699 if ( artifacts == null ) 700 { 701 if ( artifactFilter == null || resolvedArtifacts == null ) 702 { 703 artifacts = new LinkedHashSet<Artifact>(); 704 } 705 else 706 { 707 artifacts = new LinkedHashSet<Artifact>( resolvedArtifacts.size() * 2 ); 708 for ( Artifact artifact : resolvedArtifacts ) 709 { 710 if ( artifactFilter.include( artifact ) ) 711 { 712 artifacts.add( artifact ); 713 } 714 } 715 } 716 } 717 return artifacts; 718 } 719 720 public Map<String, Artifact> getArtifactMap() 721 { 722 if ( artifactMap == null ) 723 { 724 artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() ); 725 } 726 return artifactMap; 727 } 728 729 public void setPluginArtifacts( Set<Artifact> pluginArtifacts ) 730 { 731 this.pluginArtifacts = pluginArtifacts; 732 733 this.pluginArtifactMap = null; 734 } 735 736 public Set<Artifact> getPluginArtifacts() 737 { 738 return pluginArtifacts; 739 } 740 741 public Map<String, Artifact> getPluginArtifactMap() 742 { 743 if ( pluginArtifactMap == null ) 744 { 745 pluginArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getPluginArtifacts() ); 746 } 747 748 return pluginArtifactMap; 749 } 750 751 public void setParentArtifact( Artifact parentArtifact ) 752 { 753 this.parentArtifact = parentArtifact; 754 } 755 756 public Artifact getParentArtifact() 757 { 758 return parentArtifact; 759 } 760 761 public List<Repository> getRepositories() 762 { 763 return getModel().getRepositories(); 764 } 765 766 // ---------------------------------------------------------------------- 767 // Plugins 768 // ---------------------------------------------------------------------- 769 770 public List<Plugin> getBuildPlugins() 771 { 772 if ( getModel().getBuild() == null ) 773 { 774 return Collections.emptyList(); 775 } 776 return getModel().getBuild().getPlugins(); 777 } 778 779 public List<String> getModules() 780 { 781 return getModel().getModules(); 782 } 783 784 public PluginManagement getPluginManagement() 785 { 786 PluginManagement pluginMgmt = null; 787 788 Build build = getModel().getBuild(); 789 if ( build != null ) 790 { 791 pluginMgmt = build.getPluginManagement(); 792 } 793 794 return pluginMgmt; 795 } 796 797 private Build getModelBuild() 798 { 799 Build build = getModel().getBuild(); 800 801 if ( build == null ) 802 { 803 build = new Build(); 804 805 getModel().setBuild( build ); 806 } 807 808 return build; 809 } 810 811 public void setRemoteArtifactRepositories( List<ArtifactRepository> remoteArtifactRepositories ) 812 { 813 this.remoteArtifactRepositories = remoteArtifactRepositories; 814 this.remoteProjectRepositories = RepositoryUtils.toRepos( getRemoteArtifactRepositories() ); 815 } 816 817 public List<ArtifactRepository> getRemoteArtifactRepositories() 818 { 819 if ( remoteArtifactRepositories == null ) 820 { 821 remoteArtifactRepositories = new ArrayList<ArtifactRepository>(); 822 } 823 824 return remoteArtifactRepositories; 825 } 826 827 public void setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifactRepositories ) 828 { 829 this.pluginArtifactRepositories = pluginArtifactRepositories; 830 this.remotePluginRepositories = RepositoryUtils.toRepos( getPluginArtifactRepositories() ); 831 } 832 833 /** 834 * @return a list of ArtifactRepository objects constructed from the Repository objects returned by 835 * getPluginRepositories. 836 */ 837 public List<ArtifactRepository> getPluginArtifactRepositories() 838 { 839 if ( pluginArtifactRepositories == null ) 840 { 841 pluginArtifactRepositories = new ArrayList<ArtifactRepository>(); 842 } 843 844 return pluginArtifactRepositories; 845 } 846 847 public ArtifactRepository getDistributionManagementArtifactRepository() 848 { 849 return getArtifact().isSnapshot() && ( getSnapshotArtifactRepository() != null ) ? getSnapshotArtifactRepository() 850 : getReleaseArtifactRepository(); 851 } 852 853 public List<Repository> getPluginRepositories() 854 { 855 return getModel().getPluginRepositories(); 856 } 857 858 public List<RemoteRepository> getRemoteProjectRepositories() 859 { 860 return remoteProjectRepositories; 861 } 862 863 public List<RemoteRepository> getRemotePluginRepositories() 864 { 865 return remotePluginRepositories; 866 } 867 868 public void setActiveProfiles( List<Profile> activeProfiles ) 869 { 870 this.activeProfiles = activeProfiles; 871 } 872 873 public List<Profile> getActiveProfiles() 874 { 875 return activeProfiles; 876 } 877 878 public void setInjectedProfileIds( String source, List<String> injectedProfileIds ) 879 { 880 if ( injectedProfileIds != null ) 881 { 882 this.injectedProfileIds.put( source, new ArrayList<String>( injectedProfileIds ) ); 883 } 884 else 885 { 886 this.injectedProfileIds.remove( source ); 887 } 888 } 889 890 /** 891 * Gets the identifiers of all profiles that contributed to this project's effective model. This includes active 892 * profiles from the project's POM and all its parent POMs as well as from external sources like the 893 * {@code settings.xml}. The profile identifiers are grouped by the identifier of their source, e.g. 894 * {@code <groupId>:<artifactId>:<version>} for a POM profile or {@code external} for profiles from the 895 * {@code settings.xml}. 896 * 897 * @return The identifiers of all injected profiles, indexed by the source from which the profiles originated, never 898 * {@code null}. 899 */ 900 public Map<String, List<String>> getInjectedProfileIds() 901 { 902 return this.injectedProfileIds; 903 } 904 905 /** 906 * Add or replace an artifact. This method is now deprecated. Use the @{MavenProjectHelper} to attach artifacts to a 907 * project. In spite of the 'throws' declaration on this API, this method has never thrown an exception since Maven 908 * 3.0.x. Historically, it logged and ignored a second addition of the same g/a/v/c/t. Now it replaces the file for 909 * the artifact, so that plugins (e.g. shade) can change the pathname of the file for a particular set of 910 * coordinates. 911 * 912 * @param artifact the artifact to add or replace. 913 * @throws DuplicateArtifactAttachmentException 914 */ 915 public void addAttachedArtifact( Artifact artifact ) 916 throws DuplicateArtifactAttachmentException 917 { 918 getAttachedArtifacts().add( artifact ); 919 } 920 921 public List<Artifact> getAttachedArtifacts() 922 { 923 if ( attachedArtifacts == null ) 924 { 925 attachedArtifacts = new ArrayList<Artifact>(); 926 } 927 return attachedArtifacts; 928 } 929 930 public Xpp3Dom getGoalConfiguration( String pluginGroupId, String pluginArtifactId, String executionId, 931 String goalId ) 932 { 933 Xpp3Dom dom = null; 934 935 if ( getBuildPlugins() != null ) 936 { 937 for ( Plugin plugin : getBuildPlugins() ) 938 { 939 if ( pluginGroupId.equals( plugin.getGroupId() ) && pluginArtifactId.equals( plugin.getArtifactId() ) ) 940 { 941 dom = (Xpp3Dom) plugin.getConfiguration(); 942 943 if ( executionId != null ) 944 { 945 PluginExecution execution = plugin.getExecutionsAsMap().get( executionId ); 946 if ( execution != null ) 947 { 948 // NOTE: The PluginConfigurationExpander already merged the plugin-level config in 949 dom = (Xpp3Dom) execution.getConfiguration(); 950 } 951 } 952 break; 953 } 954 } 955 } 956 957 if ( dom != null ) 958 { 959 // make a copy so the original in the POM doesn't get messed with 960 dom = new Xpp3Dom( dom ); 961 } 962 963 return dom; 964 } 965 966 public MavenProject getExecutionProject() 967 { 968 return ( executionProject == null ? this : executionProject ); 969 } 970 971 public void setExecutionProject( MavenProject executionProject ) 972 { 973 this.executionProject = executionProject; 974 } 975 976 public List<MavenProject> getCollectedProjects() 977 { 978 return collectedProjects; 979 } 980 981 public void setCollectedProjects( List<MavenProject> collectedProjects ) 982 { 983 this.collectedProjects = collectedProjects; 984 } 985 986 /** 987 * Direct dependencies that this project has. 988 * 989 * @return {@link Set} < {@link Artifact} > 990 * @see #getArtifacts() to get all transitive dependencies 991 */ 992 public Set<Artifact> getDependencyArtifacts() 993 { 994 return dependencyArtifacts; 995 } 996 997 public void setDependencyArtifacts( Set<Artifact> dependencyArtifacts ) 998 { 999 this.dependencyArtifacts = dependencyArtifacts; 1000 } 1001 1002 public void setReleaseArtifactRepository( ArtifactRepository releaseArtifactRepository ) 1003 { 1004 this.releaseArtifactRepository = releaseArtifactRepository; 1005 } 1006 1007 public void setSnapshotArtifactRepository( ArtifactRepository snapshotArtifactRepository ) 1008 { 1009 this.snapshotArtifactRepository = snapshotArtifactRepository; 1010 } 1011 1012 public void setOriginalModel( Model originalModel ) 1013 { 1014 this.originalModel = originalModel; 1015 } 1016 1017 public Model getOriginalModel() 1018 { 1019 return originalModel; 1020 } 1021 1022 public void setManagedVersionMap( Map<String, Artifact> map ) 1023 { 1024 managedVersionMap = map; 1025 } 1026 1027 public Map<String, Artifact> getManagedVersionMap() 1028 { 1029 return managedVersionMap; 1030 } 1031 1032 @Override 1033 public boolean equals( Object other ) 1034 { 1035 if ( other == this ) 1036 { 1037 return true; 1038 } 1039 else if ( !( other instanceof MavenProject ) ) 1040 { 1041 return false; 1042 } 1043 1044 MavenProject that = (MavenProject) other; 1045 1046 return eq( getArtifactId(), that.getArtifactId() ) && eq( getGroupId(), that.getGroupId() ) 1047 && eq( getVersion(), that.getVersion() ); 1048 } 1049 1050 private static <T> boolean eq( T s1, T s2 ) 1051 { 1052 return ( s1 != null ) ? s1.equals( s2 ) : s2 == null; 1053 } 1054 1055 @Override 1056 public int hashCode() 1057 { 1058 int hash = 17; 1059 hash = 31 * hash + getGroupId().hashCode(); 1060 hash = 31 * hash + getArtifactId().hashCode(); 1061 hash = 31 * hash + getVersion().hashCode(); 1062 return hash; 1063 } 1064 1065 public List<Extension> getBuildExtensions() 1066 { 1067 Build build = getBuild(); 1068 if ( ( build == null ) || ( build.getExtensions() == null ) ) 1069 { 1070 return Collections.emptyList(); 1071 } 1072 else 1073 { 1074 return build.getExtensions(); 1075 } 1076 } 1077 1078 public void addProjectReference( MavenProject project ) 1079 { 1080 projectReferences.put( getProjectReferenceId( project.getGroupId(), project.getArtifactId(), 1081 project.getVersion() ), project ); 1082 } 1083 1084 public Properties getProperties() 1085 { 1086 return getModel().getProperties(); 1087 } 1088 1089 public List<String> getFilters() 1090 { 1091 return getBuild().getFilters(); 1092 } 1093 1094 public Map<String, MavenProject> getProjectReferences() 1095 { 1096 return projectReferences; 1097 } 1098 1099 public boolean isExecutionRoot() 1100 { 1101 return executionRoot; 1102 } 1103 1104 public void setExecutionRoot( boolean executionRoot ) 1105 { 1106 this.executionRoot = executionRoot; 1107 } 1108 1109 public String getDefaultGoal() 1110 { 1111 return getBuild() != null ? getBuild().getDefaultGoal() : null; 1112 } 1113 1114 public Plugin getPlugin( String pluginKey ) 1115 { 1116 return getBuild().getPluginsAsMap().get( pluginKey ); 1117 } 1118 1119 /** 1120 * Default toString 1121 */ 1122 @Override 1123 public String toString() 1124 { 1125 StringBuilder sb = new StringBuilder( 128 ); 1126 sb.append( "MavenProject: " ); 1127 sb.append( getGroupId() ); 1128 sb.append( ":" ); 1129 sb.append( getArtifactId() ); 1130 sb.append( ":" ); 1131 sb.append( getVersion() ); 1132 sb.append( " @ " ); 1133 1134 try 1135 { 1136 sb.append( getFile().getPath() ); 1137 } 1138 catch ( NullPointerException e ) 1139 { 1140 // don't log it. 1141 } 1142 1143 return sb.toString(); 1144 } 1145 1146 /** 1147 * @throws CloneNotSupportedException 1148 * @since 2.0.9 1149 */ 1150 @Override 1151 public MavenProject clone() 1152 { 1153 MavenProject clone; 1154 try 1155 { 1156 clone = (MavenProject) super.clone(); 1157 } 1158 catch ( CloneNotSupportedException e ) 1159 { 1160 throw new UnsupportedOperationException( e ); 1161 } 1162 1163 clone.deepCopy( this ); 1164 1165 return clone; 1166 } 1167 1168 protected void setModel( Model model ) 1169 { 1170 this.model = model; 1171 } 1172 1173 protected void setAttachedArtifacts( List<Artifact> attachedArtifacts ) 1174 { 1175 this.attachedArtifacts = attachedArtifacts; 1176 } 1177 1178 protected void setCompileSourceRoots( List<String> compileSourceRoots ) 1179 { 1180 this.compileSourceRoots = compileSourceRoots; 1181 } 1182 1183 protected void setTestCompileSourceRoots( List<String> testCompileSourceRoots ) 1184 { 1185 this.testCompileSourceRoots = testCompileSourceRoots; 1186 } 1187 1188 protected ArtifactRepository getReleaseArtifactRepository() 1189 { 1190 return releaseArtifactRepository; 1191 } 1192 1193 protected ArtifactRepository getSnapshotArtifactRepository() 1194 { 1195 return snapshotArtifactRepository; 1196 } 1197 1198 private void deepCopy( MavenProject project ) 1199 { 1200 // disown the parent 1201 1202 // copy fields 1203 setFile( project.getFile() ); 1204 1205 // don't need a deep copy, they don't get modified or added/removed to/from - but make them unmodifiable to be 1206 // sure! 1207 if ( project.getDependencyArtifacts() != null ) 1208 { 1209 setDependencyArtifacts( Collections.unmodifiableSet( project.getDependencyArtifacts() ) ); 1210 } 1211 1212 if ( project.getArtifacts() != null ) 1213 { 1214 setArtifacts( Collections.unmodifiableSet( project.getArtifacts() ) ); 1215 } 1216 1217 if ( project.getParentFile() != null ) 1218 { 1219 parentFile = new File( project.getParentFile().getAbsolutePath() ); 1220 } 1221 1222 if ( project.getPluginArtifacts() != null ) 1223 { 1224 setPluginArtifacts( Collections.unmodifiableSet( project.getPluginArtifacts() ) ); 1225 } 1226 1227 if ( project.getReportArtifacts() != null ) 1228 { 1229 setReportArtifacts( Collections.unmodifiableSet( project.getReportArtifacts() ) ); 1230 } 1231 1232 if ( project.getExtensionArtifacts() != null ) 1233 { 1234 setExtensionArtifacts( Collections.unmodifiableSet( project.getExtensionArtifacts() ) ); 1235 } 1236 1237 setParentArtifact( ( project.getParentArtifact() ) ); 1238 1239 if ( project.getRemoteArtifactRepositories() != null ) 1240 { 1241 setRemoteArtifactRepositories( Collections.unmodifiableList( project.getRemoteArtifactRepositories() ) ); 1242 } 1243 1244 if ( project.getPluginArtifactRepositories() != null ) 1245 { 1246 setPluginArtifactRepositories( ( Collections.unmodifiableList( project.getPluginArtifactRepositories() ) ) ); 1247 } 1248 1249 if ( project.getActiveProfiles() != null ) 1250 { 1251 setActiveProfiles( ( Collections.unmodifiableList( project.getActiveProfiles() ) ) ); 1252 } 1253 1254 if ( project.getAttachedArtifacts() != null ) 1255 { 1256 // clone properties modifyable by plugins in a forked lifecycle 1257 setAttachedArtifacts( new ArrayList<Artifact>( project.getAttachedArtifacts() ) ); 1258 } 1259 1260 if ( project.getCompileSourceRoots() != null ) 1261 { 1262 // clone source roots 1263 setCompileSourceRoots( ( new ArrayList<String>( project.getCompileSourceRoots() ) ) ); 1264 } 1265 1266 if ( project.getTestCompileSourceRoots() != null ) 1267 { 1268 setTestCompileSourceRoots( ( new ArrayList<String>( project.getTestCompileSourceRoots() ) ) ); 1269 } 1270 1271 if ( project.getScriptSourceRoots() != null ) 1272 { 1273 setScriptSourceRoots( ( new ArrayList<String>( project.getScriptSourceRoots() ) ) ); 1274 } 1275 1276 if ( project.getModel() != null ) 1277 { 1278 setModel( project.getModel().clone() ); 1279 } 1280 1281 if ( project.getOriginalModel() != null ) 1282 { 1283 setOriginalModel( project.getOriginalModel() ); 1284 } 1285 1286 setExecutionRoot( project.isExecutionRoot() ); 1287 1288 if ( project.getArtifact() != null ) 1289 { 1290 setArtifact( ArtifactUtils.copyArtifact( project.getArtifact() ) ); 1291 } 1292 1293 if ( project.getManagedVersionMap() != null ) 1294 { 1295 setManagedVersionMap( new HashMap<String, Artifact>( project.getManagedVersionMap() ) ); 1296 } 1297 1298 lifecyclePhases.addAll( project.lifecyclePhases ); 1299 } 1300 1301 private void addArtifactPath( Artifact artifact, List<String> classpath ) 1302 { 1303 File file = artifact.getFile(); 1304 if ( file != null ) 1305 { 1306 classpath.add( file.getPath() ); 1307 } 1308 } 1309 1310 private static String getProjectReferenceId( String groupId, String artifactId, String version ) 1311 { 1312 StringBuilder buffer = new StringBuilder( 128 ); 1313 buffer.append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( version ); 1314 return buffer.toString(); 1315 } 1316 1317 /** 1318 * Sets the value of the context value of this project identified by the given key. If the supplied value is 1319 * <code>null</code>, the context value is removed from this project. Context values are intended to allow core 1320 * extensions to associate derived state with project instances. 1321 */ 1322 public void setContextValue( String key, Object value ) 1323 { 1324 if ( context == null ) 1325 { 1326 context = new HashMap<String, Object>(); 1327 } 1328 if ( value != null ) 1329 { 1330 context.put( key, value ); 1331 } 1332 else 1333 { 1334 context.remove( key ); 1335 } 1336 } 1337 1338 /** 1339 * Returns context value of this project associated with the given key or null if this project has no such value. 1340 */ 1341 public Object getContextValue( String key ) 1342 { 1343 if ( context == null ) 1344 { 1345 return null; 1346 } 1347 return context.get( key ); 1348 } 1349 1350 /** 1351 * Sets the project's class realm. <strong>Warning:</strong> This is an internal utility method that is only public 1352 * for technical reasons, it is not part of the public API. In particular, this method can be changed or deleted 1353 * without prior notice and must not be used by plugins. 1354 * 1355 * @param classRealm The class realm hosting the build extensions of this project, may be {@code null}. 1356 */ 1357 public void setClassRealm( ClassRealm classRealm ) 1358 { 1359 this.classRealm = classRealm; 1360 } 1361 1362 /** 1363 * Gets the project's class realm. This class realm hosts the build extensions of the project. 1364 * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not 1365 * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be 1366 * used by plugins. 1367 * 1368 * @return The project's class realm or {@code null}. 1369 */ 1370 public ClassRealm getClassRealm() 1371 { 1372 return classRealm; 1373 } 1374 1375 /** 1376 * Sets the artifact filter used to exclude shared extension artifacts from plugin realms. <strong>Warning:</strong> 1377 * This is an internal utility method that is only public for technical reasons, it is not part of the public API. 1378 * In particular, this method can be changed or deleted without prior notice and must not be used by plugins. 1379 * 1380 * @param extensionDependencyFilter The dependency filter to apply to plugins, may be {@code null}. 1381 */ 1382 public void setExtensionDependencyFilter( DependencyFilter extensionDependencyFilter ) 1383 { 1384 this.extensionDependencyFilter = extensionDependencyFilter; 1385 } 1386 1387 /** 1388 * Gets the dependency filter used to exclude shared extension artifacts from plugin realms. 1389 * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not 1390 * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be 1391 * used by plugins. 1392 * 1393 * @return The dependency filter or {@code null}. 1394 */ 1395 public DependencyFilter getExtensionDependencyFilter() 1396 { 1397 return extensionDependencyFilter; 1398 } 1399 1400 /** 1401 * Sets the transitive dependency artifacts that have been resolved/collected for this project. 1402 * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not 1403 * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be 1404 * used by plugins. 1405 * 1406 * @param artifacts The set of artifacts, may be {@code null}. 1407 */ 1408 public void setResolvedArtifacts( Set<Artifact> artifacts ) 1409 { 1410 this.resolvedArtifacts = ( artifacts != null ) ? artifacts : Collections.<Artifact> emptySet(); 1411 this.artifacts = null; 1412 this.artifactMap = null; 1413 } 1414 1415 /** 1416 * Sets the scope filter to select the artifacts being exposed to the currently executed mojo. 1417 * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not 1418 * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be 1419 * used by plugins. 1420 * 1421 * @param artifactFilter The artifact filter, may be {@code null} to exclude all artifacts. 1422 */ 1423 public void setArtifactFilter( ArtifactFilter artifactFilter ) 1424 { 1425 this.artifactFilter = artifactFilter; 1426 this.artifacts = null; 1427 this.artifactMap = null; 1428 } 1429 1430 /** 1431 * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not 1432 * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be 1433 * used by plugins. 1434 * 1435 * @param phase The phase to check for, must not be {@code null}. 1436 * @return {@code true} if the phase has been seen. 1437 */ 1438 public boolean hasLifecyclePhase( String phase ) 1439 { 1440 return lifecyclePhases.contains( phase ); 1441 } 1442 1443 /** 1444 * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not 1445 * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be 1446 * used by plugins. 1447 * 1448 * @param lifecyclePhase The lifecycle phase to add, must not be {@code null}. 1449 */ 1450 public void addLifecyclePhase( String lifecyclePhase ) 1451 { 1452 lifecyclePhases.add( lifecyclePhase ); 1453 } 1454 1455 // -------------------------------------------------------------------------------------------------------------------- 1456 // 1457 // 1458 // D E P R E C A T E D 1459 // 1460 // 1461 // -------------------------------------------------------------------------------------------------------------------- 1462 // 1463 // Everything below will be removed for Maven 4.0.0 1464 // 1465 // -------------------------------------------------------------------------------------------------------------------- 1466 1467 private ProjectBuildingRequest projectBuilderConfiguration; 1468 1469 private Map<String, String> moduleAdjustments; 1470 1471 @Deprecated // This appears only to be used in test code 1472 public String getModulePathAdjustment( MavenProject moduleProject ) 1473 throws IOException 1474 { 1475 // FIXME: This is hacky. What if module directory doesn't match artifactid, and parent 1476 // is coming from the repository?? 1477 String module = moduleProject.getArtifactId(); 1478 1479 File moduleFile = moduleProject.getFile(); 1480 1481 if ( moduleFile != null ) 1482 { 1483 File moduleDir = moduleFile.getCanonicalFile().getParentFile(); 1484 1485 module = moduleDir.getName(); 1486 } 1487 1488 if ( moduleAdjustments == null ) 1489 { 1490 moduleAdjustments = new HashMap<String, String>(); 1491 1492 List<String> modules = getModules(); 1493 if ( modules != null ) 1494 { 1495 for ( String modulePath : modules ) 1496 { 1497 String moduleName = modulePath; 1498 1499 if ( moduleName.endsWith( "/" ) || moduleName.endsWith( "\\" ) ) 1500 { 1501 moduleName = moduleName.substring( 0, moduleName.length() - 1 ); 1502 } 1503 1504 int lastSlash = moduleName.lastIndexOf( '/' ); 1505 1506 if ( lastSlash < 0 ) 1507 { 1508 lastSlash = moduleName.lastIndexOf( '\\' ); 1509 } 1510 1511 String adjustment = null; 1512 1513 if ( lastSlash > -1 ) 1514 { 1515 moduleName = moduleName.substring( lastSlash + 1 ); 1516 adjustment = modulePath.substring( 0, lastSlash ); 1517 } 1518 1519 moduleAdjustments.put( moduleName, adjustment ); 1520 } 1521 } 1522 } 1523 1524 return moduleAdjustments.get( module ); 1525 } 1526 1527 @Deprecated 1528 public Set<Artifact> createArtifacts( ArtifactFactory artifactFactory, String inheritedScope, ArtifactFilter filter ) 1529 throws InvalidDependencyVersionException 1530 { 1531 return MavenMetadataSource.createArtifacts( artifactFactory, getDependencies(), inheritedScope, filter, this ); 1532 } 1533 1534 @Deprecated 1535 protected void setScriptSourceRoots( List<String> scriptSourceRoots ) 1536 { 1537 this.scriptSourceRoots = scriptSourceRoots; 1538 } 1539 1540 @Deprecated 1541 public void addScriptSourceRoot( String path ) 1542 { 1543 if ( path != null ) 1544 { 1545 path = path.trim(); 1546 if ( path.length() != 0 ) 1547 { 1548 if ( !getScriptSourceRoots().contains( path ) ) 1549 { 1550 getScriptSourceRoots().add( path ); 1551 } 1552 } 1553 } 1554 } 1555 1556 @Deprecated 1557 public List<String> getScriptSourceRoots() 1558 { 1559 return scriptSourceRoots; 1560 } 1561 1562 @Deprecated 1563 public List<Artifact> getCompileArtifacts() 1564 { 1565 List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() ); 1566 1567 for ( Artifact a : getArtifacts() ) 1568 { 1569 // TODO: classpath check doesn't belong here - that's the other method 1570 if ( a.getArtifactHandler().isAddedToClasspath() ) 1571 { 1572 // TODO: let the scope handler deal with this 1573 if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) 1574 || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) ) 1575 { 1576 list.add( a ); 1577 } 1578 } 1579 } 1580 return list; 1581 } 1582 1583 @Deprecated 1584 public List<Dependency> getCompileDependencies() 1585 { 1586 Set<Artifact> artifacts = getArtifacts(); 1587 1588 if ( ( artifacts == null ) || artifacts.isEmpty() ) 1589 { 1590 return Collections.emptyList(); 1591 } 1592 1593 List<Dependency> list = new ArrayList<Dependency>( artifacts.size() ); 1594 1595 for ( Artifact a : getArtifacts() ) 1596 { 1597 // TODO: let the scope handler deal with this 1598 if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) 1599 || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) ) 1600 { 1601 Dependency dependency = new Dependency(); 1602 1603 dependency.setArtifactId( a.getArtifactId() ); 1604 dependency.setGroupId( a.getGroupId() ); 1605 dependency.setVersion( a.getVersion() ); 1606 dependency.setScope( a.getScope() ); 1607 dependency.setType( a.getType() ); 1608 dependency.setClassifier( a.getClassifier() ); 1609 1610 list.add( dependency ); 1611 } 1612 } 1613 return list; 1614 } 1615 1616 @Deprecated 1617 public List<Artifact> getTestArtifacts() 1618 { 1619 List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() ); 1620 1621 for ( Artifact a : getArtifacts() ) 1622 { 1623 // TODO: classpath check doesn't belong here - that's the other method 1624 if ( a.getArtifactHandler().isAddedToClasspath() ) 1625 { 1626 list.add( a ); 1627 } 1628 } 1629 return list; 1630 } 1631 1632 @Deprecated 1633 public List<Dependency> getTestDependencies() 1634 { 1635 Set<Artifact> artifacts = getArtifacts(); 1636 1637 if ( ( artifacts == null ) || artifacts.isEmpty() ) 1638 { 1639 return Collections.emptyList(); 1640 } 1641 1642 List<Dependency> list = new ArrayList<Dependency>( artifacts.size() ); 1643 1644 for ( Artifact a : getArtifacts() ) 1645 { 1646 Dependency dependency = new Dependency(); 1647 1648 dependency.setArtifactId( a.getArtifactId() ); 1649 dependency.setGroupId( a.getGroupId() ); 1650 dependency.setVersion( a.getVersion() ); 1651 dependency.setScope( a.getScope() ); 1652 dependency.setType( a.getType() ); 1653 dependency.setClassifier( a.getClassifier() ); 1654 1655 list.add( dependency ); 1656 } 1657 return list; 1658 } 1659 1660 @Deprecated // used by the Maven ITs 1661 public List<Dependency> getRuntimeDependencies() 1662 { 1663 Set<Artifact> artifacts = getArtifacts(); 1664 1665 if ( ( artifacts == null ) || artifacts.isEmpty() ) 1666 { 1667 return Collections.emptyList(); 1668 } 1669 1670 List<Dependency> list = new ArrayList<Dependency>( artifacts.size() ); 1671 1672 for ( Artifact a : getArtifacts() ) 1673 { 1674 // TODO: let the scope handler deal with this 1675 if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) 1676 { 1677 Dependency dependency = new Dependency(); 1678 1679 dependency.setArtifactId( a.getArtifactId() ); 1680 dependency.setGroupId( a.getGroupId() ); 1681 dependency.setVersion( a.getVersion() ); 1682 dependency.setScope( a.getScope() ); 1683 dependency.setType( a.getType() ); 1684 dependency.setClassifier( a.getClassifier() ); 1685 1686 list.add( dependency ); 1687 } 1688 } 1689 return list; 1690 } 1691 1692 @Deprecated 1693 public List<Artifact> getRuntimeArtifacts() 1694 { 1695 List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() ); 1696 1697 for ( Artifact a : getArtifacts() ) 1698 { 1699 // TODO: classpath check doesn't belong here - that's the other method 1700 if ( a.getArtifactHandler().isAddedToClasspath() 1701 // TODO: let the scope handler deal with this 1702 && ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) ) 1703 { 1704 list.add( a ); 1705 } 1706 } 1707 return list; 1708 } 1709 1710 @Deprecated 1711 public List<String> getSystemClasspathElements() 1712 throws DependencyResolutionRequiredException 1713 { 1714 List<String> list = new ArrayList<String>( getArtifacts().size() ); 1715 1716 String d = getBuild().getOutputDirectory(); 1717 if ( d != null ) 1718 { 1719 list.add( d ); 1720 } 1721 1722 for ( Artifact a : getArtifacts() ) 1723 { 1724 if ( a.getArtifactHandler().isAddedToClasspath() ) 1725 { 1726 // TODO: let the scope handler deal with this 1727 if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) ) 1728 { 1729 addArtifactPath( a, list ); 1730 } 1731 } 1732 } 1733 return list; 1734 } 1735 1736 @Deprecated 1737 public List<Artifact> getSystemArtifacts() 1738 { 1739 List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() ); 1740 1741 for ( Artifact a : getArtifacts() ) 1742 { 1743 // TODO: classpath check doesn't belong here - that's the other method 1744 if ( a.getArtifactHandler().isAddedToClasspath() ) 1745 { 1746 // TODO: let the scope handler deal with this 1747 if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) ) 1748 { 1749 list.add( a ); 1750 } 1751 } 1752 } 1753 return list; 1754 } 1755 1756 @Deprecated 1757 public List<Dependency> getSystemDependencies() 1758 { 1759 Set<Artifact> artifacts = getArtifacts(); 1760 1761 if ( ( artifacts == null ) || artifacts.isEmpty() ) 1762 { 1763 return Collections.emptyList(); 1764 } 1765 1766 List<Dependency> list = new ArrayList<Dependency>( artifacts.size() ); 1767 1768 for ( Artifact a : getArtifacts() ) 1769 { 1770 // TODO: let the scope handler deal with this 1771 if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) ) 1772 { 1773 Dependency dependency = new Dependency(); 1774 1775 dependency.setArtifactId( a.getArtifactId() ); 1776 dependency.setGroupId( a.getGroupId() ); 1777 dependency.setVersion( a.getVersion() ); 1778 dependency.setScope( a.getScope() ); 1779 dependency.setType( a.getType() ); 1780 dependency.setClassifier( a.getClassifier() ); 1781 1782 list.add( dependency ); 1783 } 1784 } 1785 return list; 1786 } 1787 1788 @Deprecated 1789 public void setReporting( Reporting reporting ) 1790 { 1791 getModel().setReporting( reporting ); 1792 } 1793 1794 @Deprecated 1795 public Reporting getReporting() 1796 { 1797 return getModel().getReporting(); 1798 } 1799 1800 @Deprecated 1801 public void setReportArtifacts( Set<Artifact> reportArtifacts ) 1802 { 1803 this.reportArtifacts = reportArtifacts; 1804 1805 reportArtifactMap = null; 1806 } 1807 1808 @Deprecated 1809 public Set<Artifact> getReportArtifacts() 1810 { 1811 return reportArtifacts; 1812 } 1813 1814 @Deprecated 1815 public Map<String, Artifact> getReportArtifactMap() 1816 { 1817 if ( reportArtifactMap == null ) 1818 { 1819 reportArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getReportArtifacts() ); 1820 } 1821 1822 return reportArtifactMap; 1823 } 1824 1825 @Deprecated 1826 public void setExtensionArtifacts( Set<Artifact> extensionArtifacts ) 1827 { 1828 this.extensionArtifacts = extensionArtifacts; 1829 1830 extensionArtifactMap = null; 1831 } 1832 1833 @Deprecated 1834 public Set<Artifact> getExtensionArtifacts() 1835 { 1836 return extensionArtifacts; 1837 } 1838 1839 @Deprecated 1840 public Map<String, Artifact> getExtensionArtifactMap() 1841 { 1842 if ( extensionArtifactMap == null ) 1843 { 1844 extensionArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getExtensionArtifacts() ); 1845 } 1846 1847 return extensionArtifactMap; 1848 } 1849 1850 @Deprecated 1851 public List<ReportPlugin> getReportPlugins() 1852 { 1853 if ( getModel().getReporting() == null ) 1854 { 1855 return Collections.emptyList(); 1856 } 1857 return getModel().getReporting().getPlugins(); 1858 1859 } 1860 1861 @Deprecated 1862 public Xpp3Dom getReportConfiguration( String pluginGroupId, String pluginArtifactId, String reportSetId ) 1863 { 1864 Xpp3Dom dom = null; 1865 1866 // ---------------------------------------------------------------------- 1867 // I would like to be able to lookup the Mojo object using a key but 1868 // we have a limitation in modello that will be remedied shortly. So 1869 // for now I have to iterate through and see what we have. 1870 // ---------------------------------------------------------------------- 1871 1872 if ( getReportPlugins() != null ) 1873 { 1874 for ( ReportPlugin plugin : getReportPlugins() ) 1875 { 1876 if ( pluginGroupId.equals( plugin.getGroupId() ) && pluginArtifactId.equals( plugin.getArtifactId() ) ) 1877 { 1878 dom = (Xpp3Dom) plugin.getConfiguration(); 1879 1880 if ( reportSetId != null ) 1881 { 1882 ReportSet reportSet = plugin.getReportSetsAsMap().get( reportSetId ); 1883 if ( reportSet != null ) 1884 { 1885 Xpp3Dom executionConfiguration = (Xpp3Dom) reportSet.getConfiguration(); 1886 if ( executionConfiguration != null ) 1887 { 1888 Xpp3Dom newDom = new Xpp3Dom( executionConfiguration ); 1889 dom = Xpp3Dom.mergeXpp3Dom( newDom, dom ); 1890 } 1891 } 1892 } 1893 break; 1894 } 1895 } 1896 } 1897 1898 if ( dom != null ) 1899 { 1900 // make a copy so the original in the POM doesn't get messed with 1901 dom = new Xpp3Dom( dom ); 1902 } 1903 1904 return dom; 1905 } 1906 1907 /** 1908 * @deprecated Use MavenProjectHelper.attachArtifact(..) instead. 1909 */ 1910 @Deprecated 1911 public void attachArtifact( String type, String classifier, File file ) 1912 { 1913 } 1914 1915 /** 1916 * @deprecated Use {@link org.apache.maven.model.io.ModelWriter}. 1917 */ 1918 @Deprecated 1919 public void writeModel( Writer writer ) 1920 throws IOException 1921 { 1922 MavenXpp3Writer pomWriter = new MavenXpp3Writer(); 1923 pomWriter.write( writer, getModel() ); 1924 } 1925 1926 /** 1927 * @deprecated Use {@link org.apache.maven.model.io.ModelWriter}. 1928 */ 1929 @Deprecated 1930 public void writeOriginalModel( Writer writer ) 1931 throws IOException 1932 { 1933 MavenXpp3Writer pomWriter = new MavenXpp3Writer(); 1934 pomWriter.write( writer, getOriginalModel() ); 1935 } 1936 1937 @Deprecated 1938 public Artifact replaceWithActiveArtifact( Artifact pluginArtifact ) 1939 { 1940 return pluginArtifact; 1941 } 1942 1943 /** 1944 * Gets the project building request from which this project instance was created. <strong>Warning:</strong> This is 1945 * an utility method that is meant to assist integrators of Maven, it must not be used by Maven plugins. 1946 * 1947 * @return The project building request or {@code null}. 1948 * @since 2.1 1949 */ 1950 @Deprecated 1951 public ProjectBuildingRequest getProjectBuildingRequest() 1952 { 1953 return projectBuilderConfiguration; 1954 } 1955 1956 /** 1957 * Sets the project building request from which this project instance was created. <strong>Warning:</strong> This is 1958 * an utility method that is meant to assist integrators of Maven, it must not be used by Maven plugins. 1959 * 1960 * @param projectBuildingRequest The project building request, may be {@code null}. 1961 * @since 2.1 1962 */ 1963 // used by maven-dependency-tree 1964 @Deprecated 1965 public void setProjectBuildingRequest( ProjectBuildingRequest projectBuildingRequest ) 1966 { 1967 this.projectBuilderConfiguration = projectBuildingRequest; 1968 } 1969}